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

时间:2014-07-22 00:19:32

标签: objective-c cocoa wkwebview

目前,我只能通过将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]];

2 个答案:

答案 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中使用此代码。也许这会节省你的时间!

相关问题