evaluateJavaScript WKWebView iOS 15 not working



我正在使用WebCrypto库来解密数据,但它不适用于iOS 15在iOS 14中运行良好

我检查了webView的evaluateJavaScript函数抛出错误

Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=27, 
WKJavaScriptExceptionMessage=TypeError: undefined is not an object (evaluating 'y.importKey'), WKJavaScriptExceptionColumnNumber=8260, 
WKJavaScriptExceptionSourceURL=undefined, NSLocalizedDescription=A JavaScript exception occurred}

我也无意中发现了这一点,新的IOS15行为也破坏了我们的代码。显然,苹果改变了evaluateJavaScript的语义:当下面的代码被调用时,如果太早调用新函数,它不会出现在JS命名空间中。

[_webview evaluateJavaScript:@"function foobar() {console.log('in foobar');}" completionHandler:^(NSObject* res,NSError* err) {
}];

如果这段代码在之前被称为

[_webview loadRequest:req];

,那么它就不再有任何效果了(但是此时不会产生错误……函数进入涅槃状态)。解决方案是像https://developer.apple.com/forums/thread/684020

中指出的那样添加用户脚本代码。
WKUserScript *script = [[WKUserScript alloc] initWithSource:@"function foobar() {console.log('in foobar');" injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[_webview.configuration.userContentController addUserScript:script];

最新更新