Objective c WKWebView在不重新加载页面的情况下评估Javascript
目前,我只能通过将javascript添加到webview配置的userContentController并重新加载页面来了解如何评估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
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];