WKUserScript не вызывать в iOS10, но работает в iOS9

У меня есть код, который отлично работает в 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 ответ

Решение

Ну, так как я не разработчик JS, я подумал, что впрыснутый код - это хорошо. Но это не для iOS 10 jsBar должны быть:

let jsBar = "function MyInterface() {}; { MyInterface.doBar = function() { window.webkit.messageHandlers.doBar.postMessage(\"doBar\"); };"
Другие вопросы по тегам