Xamarin
用于使用 .NET 和 C# 构建 Android 和 iOS 应用的 Microsoft 开源应用平台。
15 个问题
当我尝试在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
你好,
您可以在 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)
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。