2017-07-15 1 views
0

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?

Antwort

0

Nun, ich bin kein JS-Entwickler Ich dachte, dass injizierten Code in Ordnung war. Aber es ist nicht für iOS 10 jsBar müssen sein:

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