WKWebview evaluateJavascript 不工作,抛出错误
WKWebview evaluateJavascript is not working, throws an error
我正在尝试从 WKWebview 中的远程站点调用现有函数:
function addtext (text) {
jQuery("#webviewtest").html(text);
}
与:
[self.WebView evaluateJavaScript:@"addtext(\"This is a text from app\");" completionHandler:^(id Result, NSError * error) {
NSLog(@"Error -> %@", error);
}];
但是这是抛出一个错误:
Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x170c788c0 {NSLocalizedDescription=A JavaScript exception occurred}
就这么简单!我一定是漏掉了一些非常愚蠢的东西!
找到了一个解决方案,正如我所期望的那样简单,我在视图完成加载内容之前添加了 javascript(在 Dom 就绪之前)。所以我只需要将我的代码移动到下面的委托方法:
- webView:didFinishNavigation:(来自 WKNavigationDelegate)
我希望这对某人有所帮助。
我发现问题是由于 webView:didFinishNavigation:
在页面内容实际加载之前被调用引起的。我认为该网站正在使用 angularjs。
我引入了一个手动延迟,这似乎对我有用:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("loaded)")
//abtn_run(UIButton())
self.perform(#selector(performAction), with: nil, afterDelay: 3.0)
}
我在这里打过电话:
func performAction() {
//This function will perform this after delay of 3 seconds
}
理想情况下,最好的解决方案是让侦听器为 angularjs "page ready" 推送一个事件,但我不确定这在 wkwebview 中是否可行。
我正在尝试从 WKWebview 中的远程站点调用现有函数:
function addtext (text) {
jQuery("#webviewtest").html(text);
}
与:
[self.WebView evaluateJavaScript:@"addtext(\"This is a text from app\");" completionHandler:^(id Result, NSError * error) {
NSLog(@"Error -> %@", error);
}];
但是这是抛出一个错误:
Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x170c788c0 {NSLocalizedDescription=A JavaScript exception occurred}
就这么简单!我一定是漏掉了一些非常愚蠢的东西!
找到了一个解决方案,正如我所期望的那样简单,我在视图完成加载内容之前添加了 javascript(在 Dom 就绪之前)。所以我只需要将我的代码移动到下面的委托方法:
- webView:didFinishNavigation:(来自 WKNavigationDelegate)
我希望这对某人有所帮助。
我发现问题是由于 webView:didFinishNavigation:
在页面内容实际加载之前被调用引起的。我认为该网站正在使用 angularjs。
我引入了一个手动延迟,这似乎对我有用:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("loaded)")
//abtn_run(UIButton())
self.perform(#selector(performAction), with: nil, afterDelay: 3.0)
}
我在这里打过电话:
func performAction() {
//This function will perform this after delay of 3 seconds
}
理想情况下,最好的解决方案是让侦听器为 angularjs "page ready" 推送一个事件,但我不确定这在 wkwebview 中是否可行。