在ios14.0的WebView中注入带有变量和函数的javascript类.- 14.4



我试图在WKWebview中注入一些简单的javascript,它在iOS 14.5和iOS 15+上工作得很好。

iOS 14.0 - 14.4不支持。似乎javascript对于那些特定的iOS版本是错误的。

是否有其他的方式,我可以写这个javascript代码?

相关代码段:

enum Constants {
static let loginMessageHandler = "loginMessageHandler"
static let js = """
class JavascriptClass {
static openLogin () {
if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.loginMessageHandler) {
window.webkit.messageHandlers.loginMessageHandler.postMessage({
"message": "Login"
});
}
}
static age;
static height;
static getInfo() {
if (this.age && this.height) {
return `{"age": "${this.age}", "height": "${this.height}"}`;
}
return null;
}
}
"""
}
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true
webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true
webView.configuration.userContentController.add(self, name: Constants.loginMessageHandler)
let script = WKUserScript(source: Constants.js, injectionTime: .atDocumentStart, forMainFrameOnly: false)
webView.configuration.userContentController.addUserScript(script)
let url = URL(string: [some url string])!
webView.load(URLRequest(url: url))
}
extension JSWebviewViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
if message.name == Constants.loginMessageHandler {
didTapOpenLoginButton()
}
}
}

终于解决了删除静态类字段声明因为iOS版本14.0 - 14.4似乎还不支持。

static let js = """
class JavascriptClass {
static openLogin () {
if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.loginMessageHandler) {
window.webkit.messageHandlers.loginMessageHandler.postMessage({
"message": "Login"
});
}
}
static getInfo() {
if (this.age && this.height) {
return `{"age": "${this.age}", "height": "${this.height}"}`;
}
return null;
}
}
"""

最新更新