我的代码在 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 中运行?