оценить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];
Другие вопросы по тегам