WKUserScript不能在iOS10中调用,但可以在iOS9中使用

时间:2017-07-15 09:58:21

标签: javascript ios swift wkwebview wkuserscript

我的代码在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窗口中.MyInterface未定义,但是存在带有doBar代码的用户脚本。

如何正确注入doBar,因此它可以在iOS 10中运行,假设我无法更改网页代码?

1 个答案:

答案 0 :(得分:0)

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

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