WKWebview';s的javascript调用返回nil
我正在尝试从使用UIWebview迁移到WKWebview,我需要调用webview中的各种Javascript函数 在UIWebview中,这样做没有问题,但是WKWebview会对任何和所有调用抛出WKErrorDomain错误4。我认为这可能是一种竞争条件,在这种情况下,我调用的函数在DOM中还不存在,但我添加了一个调试语句,以便在页面加载后进行相同的调用,但这些调用不起作用。我甚至做了一个“document.body.innerHTML”,当webview中显示的内容清晰时,它返回nil 问题在于,当通过Safari web Inspector检查web代码时,一切正常,所有调用都正常 为什么会这样,怎么会这样?我确实使用WKWebViewConfiguration初始化了WKWebView,这样它就可以在不同的WebView之间共享cookies,所以可能会有一些东西,但我很困惑 这就是我初始化WKWebView的方式WKWebview';s的javascript调用返回nil,javascript,ios,uiwebview,wkwebview,wkwebviewconfiguration,Javascript,Ios,Uiwebview,Wkwebview,Wkwebviewconfiguration,我正在尝试从使用UIWebview迁移到WKWebview,我需要调用webview中的各种Javascript函数 在UIWebview中,这样做没有问题,但是WKWebview会对任何和所有调用抛出WKErrorDomain错误4。我认为这可能是一种竞争条件,在这种情况下,我调用的函数在DOM中还不存在,但我添加了一个调试语句,以便在页面加载后进行相同的调用,但这些调用不起作用。我甚至做了一个“document.body.innerHTML”,当webview中显示的内容清晰时,它返回nil
WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init];
config.processPool = [[WKProcessPool alloc] init];
WKUserContentController* userContentController = WKUserContentController.new;
WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: @"document.cookie = 'cookie1=value1; domain=blah; path=/;';" injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[userContentController addUserScript:cookieScript];
config.userContentController = userContentController;
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0,0,50,50) configuration:config];
这里是一个调试语句,我将文档的innerHTML记录到控制台日志中,控制台日志打印(nil)而不是HTML
NSLog(@"%@", [self.webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:nil]);
与UIWebView不同,WKWebView执行JS异步;你不能像现在这样打印 试试这个
[self.webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) {
NSLog(@"Error is %@",error);
NSLog(@"JS result %@" ,result);
}];
你能分享代码片段吗?这样我们就没有更多的东西可以看了?