首页 > 解决方案 > 是否可以在 WKWebView 中关闭位置权限?

问题描述

我想知道是否可以阻止 WKWebView 显示位置权限提示?(“website.com”想使用您当前的位置)我相信它正在显示,因为该网站包含谷歌地图。我对在其他 SO 问题中显示的位置预加载位置不感兴趣。我只是不想在 WKWebView 中使用位置。有没有办法阻止位置权限提示出现?我曾尝试注入以下 javascript,但它不起作用。

        let contentController = WKUserContentController()

        let scriptSource = "navigator.geolocation.getCurrentPosition = function(success, error, options) { // }; navigator.geolocation.watchPosition = function(success, error, options) { // }; navigator.geolocation.clearWatch = function(id) { // };"
        let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
        contentController.addUserScript(script)

        let config = WKWebViewConfiguration()
        config.userContentController = contentController

        webView = WKWebView(frame: .zero, configuration: config)
        self.view = webView

标签: javascriptswiftwkwebview

解决方案


几点注意事项:

  1. .atDocumentEnd意味着您的脚本将在页面加载后执行,这可能会导致 javascript 在您劫持位置功能之前要求运行位置;你可能会得到更好的结果.atDocumentStart
  2. //在脚本中有序列,这可能会导致脚本的其余部分被解释为注释,从而导致注入不正确的 JS
  3. 函数的签名似乎与HTML 5 Geolocation API不匹配,尽管考虑到我们在 JS 世界中并且函数体是空的,但它可能没有什么区别。

尝试修复上述问题,这可能会导致您需要的行为。


推荐阅读