5

我正在使用 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}
4

1 回答 1

1

我也偶然发现了这一点,新的 IOS15 行为也破坏了我们的代码。显然,Apple 更改了evaluateJavaScript: 的语义,具体取决于调用以下代码的时间如果调用过早,新函数不会出现在 JS 命名空间中。

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

如果在之前调用此代码

[_webview loadRequest:req];

然后它不再有任何效果(但此时没有引发错误..该函数进入 nirvana )。解决方案是添加诸如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];
于 2021-10-01T11:39:06.143 回答