我有一个 Xamarin.Forms Prism 应用程序。它使用ios项目中的WKWebView来显示网页。在该页面中,除了来自iOS的权限之外,还显示来自浏览器的权限弹出窗口。有人可以帮我解决这个问题吗?这种情况仅发生在 iOS 中。
灵感来自 https://developer.apple.com/videos/play/wwdc2021/10032/?time=949
ViewController.swift
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!;
override func loadView() {
super.loadView();
let webViewConfiguration = WKWebViewConfiguration();
webViewConfiguration.allowsInlineMediaPlayback = true;
webView = WKWebView(frame:.zero , configuration: webViewConfiguration);
webView.uiDelegate = self;
}
override func viewDidLoad() {
super.viewDidLoad();
webView.load(...);
}
@available(iOS 15.0, *)
func webView(_ webView: WKWebView,
decideMediaCapturePermissionsFor origin: WKSecurityOrigin,
initiatedBy frame: WKFrameInfo,
type: WKMediaCaptureType) async -> WKPermissionDecision {
return .grant;
}
}
这个帖子帮助我解决了这个问题。实现一个继承自 WKUIDelegate 的类。
public class CustomWebViewDelegate : WKUIDelegate
{
[Export("webView:decideMediaCapturePermissionsForOrigin:initiatedByFrame:type:decisionHandler:")]
public override void RequestMediaCapturePermission(WKWebView webView, WKSecurityOrigin origin, WKFrameInfo frame, WKMediaCaptureType type, Action<WKPermissionDecision> decisionHandler)
{
try
{
decisionHandler(WKPermissionDecision.Grant);
base.RequestMediaCapturePermission(webView, origin, frame, type, decisionHandler);
}
catch (Exception e)
{ }
}
}
在Renderer类中添加此语句。
webView.UIDelegate = new CustomWebViewDelegate();