Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WKWebview';s的javascript调用返回nil_Javascript_Ios_Uiwebview_Wkwebview_Wkwebviewconfiguration - Fatal编程技术网

WKWebview';s的javascript调用返回nil

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

我正在尝试从使用UIWebview迁移到WKWebview,我需要调用webview中的各种Javascript函数

在UIWebview中,这样做没有问题,但是WKWebview会对任何和所有调用抛出WKErrorDomain错误4。我认为这可能是一种竞争条件,在这种情况下,我调用的函数在DOM中还不存在,但我添加了一个调试语句,以便在页面加载后进行相同的调用,但这些调用不起作用。我甚至做了一个“document.body.innerHTML”,当webview中显示的内容清晰时,它返回nil

问题在于,当通过Safari web Inspector检查web代码时,一切正常,所有调用都正常

为什么会这样,怎么会这样?我确实使用WKWebViewConfiguration初始化了WKWebView,这样它就可以在不同的WebView之间共享cookies,所以可能会有一些东西,但我很困惑

这就是我初始化WKWebView的方式

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);
}];

你能分享代码片段吗?这样我们就没有更多的东西可以看了?