如何修复 xamarin ios 网页视图中的权限窗口弹出多次的问题

Yonglun Liu (Shanghai Wicresoft Co,.Ltd.) 44,171 信誉分 Microsoft 供应商
2024-02-29T09:16:14.1233333+00:00

当我尝试在WebView中使用摄像头时,iOS 系统会要求两个权限。一个是从浏览器弹出,另一个是从手机弹出。有什么方法可以避免浏览器弹出相机权限请求?

网页使用了 getUserMedia(),因此弹出窗口出现在 iOS Safari 浏览器中。我在 WKWebviewRenderer 中使用的代码是 :

const string JavaScriptFunction2 = "window.navigator.getUserMedia = function() {webkit.messageHandlers.callbackHandler.postMessage(arguments);};";
var script2 = new WKUserScript(new NSString(JavaScriptFunction2), WKUserScriptInjectionTime.AtDocumentStart, false);
userController.AddUserScript(script2);
userController.AddScriptMessageHandler(this, "callbackHandler");

而在 DidReceiveScriptMessage 函数中 :

if (message.Name == "callbackHandler")
{
                   ((HybridWebView)Element).InvokeAction(message.Body.ToString());
  }
 

DidReceiveScriptMessage 未被调用。

此问题总结整理于:How to fix double permission popup in xamarin ios web view - Microsoft Q&A 

Xamarin
Xamarin
用于使用 .NET 和 C# 构建 Android 和 iOS 应用的 Microsoft 开源应用平台。
15 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Wenyan Zhang (Shanghai Wicresoft Co,.Ltd.) 32,546 信誉分 Microsoft 供应商
    2024-02-29T09:32:08.1+00:00

    你好,

    您可以在 iOS 中为 webview 设置WKUIDelegate

    public class CustomWebViewDelegate :WKUIDelegate  
           {  
             [Export("webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:")])  
            public override void RequestMediaCapturePermission(WKWebView webView, WKSecurityOrigin origin, WKFrameInfo frame, WKMediaCaptureType type,Action<WKPermissionDecision> decisionHandler)  
            {  
                decisionHandler(WKPermissionDecision.Grant);//As you (Anila Mathew) said, missing this line will result in a blank camera screen  
                base.RequestMediaCapturePermission(webView, origin, frame, type, decisionHandler);  
            }  
        }  
    

        在您的 WKWebviewRenderer 中的 OnElementChanged 方法中设置delegate

    
    If(e.NewElement != null)  
                {  
                  UIDelegate = new CustomWebViewDelegate();
     
                }  
    
    
    

      请观看Apple官方视频中 12:30 左右的片段- Explore WKWebView additions - WWDC21 - Videos - Apple Developer)


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。