WKUserScript 在 iOS10 中不调用,但在 iOS9 中有效

Posted

技术标签:

【中文标题】WKUserScript 在 iOS10 中不调用,但在 iOS9 中有效【英文标题】:WKUserScript not call in iOS10, but works in iOS9 【发布时间】:2017-07-15 09:58:20 【问题描述】:

我的代码在 ios 9 中完美运行,但在 iOS 10 中无法运行,特别是 doBar() 未调用。在 WKWebView 中,我正在注入 javascript 代码。

let jsFoo = "function doFoo()  window.webkit.messageHandlers.doFoo.postMessage(\"doFoo\"); "
let jsBar = "class MyInterface  static doBar()  window.webkit.messageHandlers.doBar.postMessage(\"doBar\");  "

let fooScript = WKUserScript(source: jsFoo, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let barScript = WKUserScript(source: jsBar, injectionTime: .atDocumentEnd, forMainFrameOnly: true)

contentController.addUserScript(logoutScript)
contentController.addUserScript(openPDFScript)

contentController.add(self, name: "doFoo")
contentController.add(self, name: "doBar")

在网页js代码中调用:

window.doFoo() // works in both iOS 9 and iOS 10
window.MyInterface.doBar() // works in iOS 9, but NOT working in iOS 10

Safari 调试器显示在 iOS 10 中 window.MyInterface 未定义,但存在带有 doBar 代码的用户脚本。

如果我无法更改 Web 代码,我如何正确注入 doBar,以便它可以在 iOS 10 中运行?

【问题讨论】:

【参考方案1】:

因为我不是 JS 开发人员,所以我认为注入的代码很好。但它不适用于 iOS 10 jsBar 必须是:

let jsBar = "function MyInterface() ;  MyInterface.doBar = function()  window.webkit.messageHandlers.doBar.postMessage(\"doBar\"); ;"

【讨论】:

以上是关于WKUserScript 在 iOS10 中不调用,但在 iOS9 中有效的主要内容,如果未能解决你的问题,请参考以下文章

stopUpdatingLocation 在 iOS 7 中不起作用

调用 http:// 在 ios 9 中不起作用 [重复]

Ionic 3(点击)事件进入模态在ios中不起作用

POST http 调用在 Ionic iOS 构建中不起作用

reCAPTCHA 在 iOS 10 UIWebView 中不起作用

通知本地化在 iOS 10 中不起作用