оценитьJavaScript WKWebView iOS 15 не работает
Я использую библиотеку WebCrypto для расшифровки данных, но она не работает на iOS 15. Она отлично работает в iOS 14.
Я проверил, что функция evalJavaScript в webView выдает ошибку
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}
1 ответ
Я тоже наткнулся на это, новое поведение IOS15 тоже нарушило наш код. Видимо Apple изменила семантику
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];