iOS WKWebview:始终允许相机权限

问题描述 投票:0回答:3

从 iOS 13 开始,Apple 允许我们始终记住 iOS Safari 中的允许相机权限标志。 (参考这个答案)。 iOS Twitter PWA 也有这个功能。

但是有办法在WKWebview中启用它吗?

有人知道如何实现这一目标吗?

ios permissions camera wkwebview
3个回答
4
投票

默认添加权限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)
 }

0
投票

PWA 没有 API 将其从“询问”更改为“允许”。 WebKit 上存在一个与此相关的问题:https://bugs.webkit.org/show_bug.cgi?id=215884.


0
投票

必须满足比 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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.