7

目前,我只能通过将其添加到 webview 的配置的 userContentController 并重新加载页面来弄清楚如何评估 javascript:

WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[self.webView.configuration.userContentController addUserScript:script];
[self.webView reload];

如何在我的 WKWebView 上执行类似于旧 WebView 的 javascript,stringByEvaluatingJavaScriptFromString:这样我就不必重新加载页面?

我正在尝试获得与

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

2 回答 2

11
[webView evaluateJavaScript:javascriptString completionHandler:nil];

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

于 2014-07-22T01:06:58.110 回答
9

您只能WKWebViewConfiguration通过初始化程序设置在初始化时间

[[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];

对属性的所有调用configuration都会在运行时的后期复制(请参阅文档和头文件)。所以基本上你对前三行代码所做的就是将WKUserScripta设置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:不再需要。

PS:我STKWebKitViewController在 GitHub 上的小项目中使用此代码。也许这也可以节省您的时间!

于 2014-09-07T17:29:41.383 回答