16

我正在尝试从 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}

这太简单了!我一定错过了一些非常愚蠢的东西!

4

2 回答 2

32

找到了一个解决方案,正如我所期望的那样简单,我在视图完成加载内容之前添加了 javascript(在 Dom Ready 之前)。所以我只需将我的代码移动到下面的委托方法:

我希望这可以帮助别人。

于 2015-01-09T02:08:58.807 回答
4

我发现问题是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“页面准备好”推送一个事件,但我不确定这在 wkwebview 中是否可行。

于 2016-12-30T18:13:04.207 回答