WKWebview evaluateJavascript 不工作,抛出错误

Posted

技术标签:

【中文标题】WKWebview evaluateJavascript 不工作,抛出错误【英文标题】:WKWebview evaluateJavascript is not working, throws an error 【发布时间】:2015-01-08 21:04:06 【问题描述】:

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

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

【问题讨论】:

该页面上是否加载了 jQuery? 是的,它是一个功能齐全的网站,我只是在搭建一个桥梁,让 facebook 登录工作正常。当我通常在浏览器上调用时,该功能也可以使用。 尝试不使用 jQuery:document.getElementById('webviewtest').innerHTML = text;。也许html 方法失败了。 嘿@Pinal,你让我意识到这是一个 DOM Ready 问题。下面看看我的回答。干杯。 【参考方案1】:

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

webView:didFinishNavigation:(来自WKNavigationDelegate)

我希望这对某人有所帮助。

【讨论】:

这是一个解决方案!很明显,但为我节省了很多时间,谢谢。 你实现了委托吗? android webview 相同:D【参考方案2】:

我发现问题是由于在实际加载页面内容之前调用了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 中是否可行。

【讨论】:

以上是关于WKWebview evaluateJavascript 不工作,抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS wkwebview怎么写localStorage

已有iOS项目集成cordova并使用wkwebview

滚动视图中的 WKWebView

WKWebView 那些坑

WKWebView 那些坑

WKWebView 可水平滚动