Ich habe Code, der perfekt in iOS 9 funktioniert, aber nicht in iOS 10, speziell DoBar() nicht aufgerufen. Hier in WKWebView injiziere ich JavaScript-Code.WKUserScript nicht in iOS10 anrufen, funktioniert aber in 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")
In Webseite js Code telefonieren:
window.doFoo() // works in both iOS 9 and iOS 10
window.MyInterface.doBar() // works in iOS 9, but NOT working in iOS 10
Safari Debugger zeigt, dass in iOS 10 window.MyInterface nicht definiert ist, ist jedoch vom Benutzer Skript mit dobar Code vorhanden.
Wie kann ich DoBar richtig injizieren, so dass es in iOS 10 funktioniert, unter der Annahme, dass Web-Code kann ich nicht ändern?