从 iOS 13 开始,Apple 允许我们始终记住 iOS Safari 中的允许相机权限标志。 (参考这个答案)。 iOS Twitter PWA 也有这个功能。
但是有办法在WKWebview中启用它吗?
有人知道如何实现这一目标吗?
默认添加权限WebView权限决策授予
目标c:
- (void) webView:(WKWebView *)webView
requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin
initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type
decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler
API_AVAILABLE(ios(15.0))
{
decisionHandler(WKPermissionDecisionGrant);
}
斯威夫特:
func webView(_ webView: WKWebView,
requestMediaCapturePermissionFor
origin: WKSecurityOrigin,initiatedByFrame
frame: WKFrameInfo,type: WKMediaCaptureType,
decisionHandler: @escaping (WKPermissionDecision) -> Void){
decisionHandler(.grant)
}
PWA 没有 API 将其从“询问”更改为“允许”。 WebKit 上存在一个与此相关的问题:https://bugs.webkit.org/show_bug.cgi?id=215884.
必须满足比 stackoverflow 上任何其他现有答案中提供的条件更多的条件。我附加了简化的 ViewController 以显示必须添加的所有内容。
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;
}
}