JuJ*_*oDi 6 cocoa objective-c wkwebview
目前我只能通过将其添加到webview的配置的userContentController并重新加载页面来弄清楚如何评估javascript:
WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[self.webView.configuration.userContentController addUserScript:script];
[self.webView reload];
Run Code Online (Sandbox Code Playgroud)
如何在我的WKWebView上执行类似于旧WebView的javascript,stringByEvaluatingJavaScriptFromString:这样我就不必重新加载页面了?
我想要获得与之相同效果的东西
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ", width]];
Run Code Online (Sandbox Code Playgroud)
rvi*_*007 11
[webView evaluateJavaScript:javascriptString completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)
执行与为UIWebView列出的功能相同的功能
您只能WKWebViewConfiguration通过初始化程序设置初始化时间
[[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
Run Code Online (Sandbox Code Playgroud)
对属性的所有调用configuration都将在运行时的后期复制(请参阅docs和Header文件).所以基本上you're与前三行的代码做的是设置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];
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您将evaluateJavaScript:不再需要.
PS:我STKWebKitViewController在GitHub上的小项目中使用了这段代码.也许这也会节省你的时间!