Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Objective c WKWebView在不重新加载页面的情况下评估Javascript_Objective C_Cocoa_Wkwebview - Fatal编程技术网

Objective c WKWebView在不重新加载页面的情况下评估Javascript

Objective c WKWebView在不重新加载页面的情况下评估Javascript,objective-c,cocoa,wkwebview,Objective C,Cocoa,Wkwebview,目前,我只能通过将javascript添加到webview配置的userContentController并重新加载页面来了解如何评估javascript,如下所示: WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; [self.webView.configura

目前,我只能通过将javascript添加到webview配置的userContentController并重新加载页面来了解如何评估javascript,如下所示:

WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[self.webView.configuration.userContentController addUserScript:script];
[self.webView reload];
如何在我的WKWebView上执行类似于旧WebView的
stringByEvaluatingJavaScriptFromString:
的javascript,从而不必重新加载页面

我在试着得到和你一样的效果

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ", width]];

执行与您为UIWebView列出的功能相同的功能

您只能通过初始值设定项在初始时间设置
WKWebViewConfiguration

[[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
对属性
配置
的所有调用都将在运行时的后期复制(请参阅文档和头文件)。因此,基本上,您使用前三行代码所做的是将
WKUserScript
设置为
WKWebViewConfiguration
,该配置从未使用过,因此无法工作

正确的方法是:

NSString *scriptString = @"Some javascript";
WKUserScript *script = [[WKUserScript alloc] initWithSource:scriptString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
[userContentController addUserScript:script];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = userContentController;
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
完成此操作后,您将不再需要
evaluateJavaScript:


附言:我正在我的小项目中使用这个代码。也许这也会节省你的时间

如果需要连续调用网页,该怎么办?是否每次都调用addUserScript?请定义“连续”。这种方法在每次加载页面时都运行相同的JavaScript。如果您想更改正在执行的脚本,evaluateJavaScript:可能是更好的解决方案。假设您需要调用该函数,并在每次单击uibutton时将当前时间戳作为参数传递。您将如何操作?当然是
evaluateJavaScript:
!正如您在上面的代码中所看到的,使用WKUserScripts,只能在文档开始或结束时执行,而不能执行自定义事件,例如按钮单击。
NSString *scriptString = @"Some javascript";
WKUserScript *script = [[WKUserScript alloc] initWithSource:scriptString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
[userContentController addUserScript:script];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = userContentController;
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];