目前,我只能通过将javascript添加到webview的配置的userContentController并重新加载页面来弄清楚如何评估javascript:
WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[self.webView.configuration.userContentController addUserScript:script];
[self.webView reload];
如何在我的WKWebView上执行javascript,类似于旧的WebView stringByEvaluatingJavaScriptFromString:
,这样我就不必重新加载页面了?
我试图获得与
效果相同的东西[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ", width]];
答案 0 :(得分:10)
[webView evaluateJavaScript:javascriptString completionHandler:nil];
执行与您为UIWebView列出的功能相同的功能
答案 1 :(得分:5)
您只能通过初始化程序
在初始时设置WKWebViewConfiguration
[[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
对属性configuration
的所有调用都将在运行时的后期复制(请参阅docs和Header文件)。因此,基本上您对前三行代码所做的就是将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:
。
P.S。:我在我的小项目STKWebKitViewController
on GitHub中使用此代码。也许这会节省你的时间!