2017-07-15 17 views
0

iOS 9では正常に動作しますが、iOS 10では動作しないコード、特にdoBar()が呼び出されていません。ここでWKWebViewで私はJavaScriptのコードを注入しています。 WebページのjsコードでWKUserScriptはiOS10では呼び出しませんが、iOS9で動作します

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") 

呼び出します

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

SafariのデバッガをしかしdoBarコードを持つユーザースクリプトが存在する、iOSの10にwindow.MyInterfaceが未定義であることを示しています。

doBarを正しく挿入するにはどうすればいいですか?ウェブコードを変更できないと仮定して、iOS 10でも動作しますか?

答えて

0

まあ私はJSの開発者ではない私は注射されたコードは大丈夫だと思った。しかし、それはiOS 10のためではありませんjsBarは次のようにする必要があります:

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