javascript - 是否可以在 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
解决方案
几点注意事项:
.atDocumentEnd
意味着您的脚本将在页面加载后执行,这可能会导致 javascript 在您劫持位置功能之前要求运行位置;你可能会得到更好的结果.atDocumentStart
- 您
//
在脚本中有序列,这可能会导致脚本的其余部分被解释为注释,从而导致注入不正确的 JS - 函数的签名似乎与HTML 5 Geolocation API不匹配,尽管考虑到我们在 JS 世界中并且函数体是空的,但它可能没有什么区别。
尝试修复上述问题,这可能会导致您需要的行为。
推荐阅读
- acumatica - 如何将多个网格/表格/DAC 绑定到一个标题
- android - 为什么我的第一个 Retrofit 调用不起作用,但下一个调用完美?
- python-3.x - 如何同时运行多个python脚本?
- python-3.x - 在 Python 中,有没有办法使用 networkx 以标准格式显示神经网络?
- reactjs - Redux reducer 状态更改不会触发生命周期方法
- c# - 我无法通过 IIS 访问托管页面
- reactjs - 如何在bootstrap react js中做startdate和endate?
- php - Laravel 5.5 中 PHP 单元测试中的类验证器错误
- vba - 使用 VBA / AHK 在 Outlook 中突出显示最近的电子邮件
- c++ - 操作符“<<”溢出双向链表。C++