Javascript在mac(chrome)上工作但在UIWebView中没有

时间:2014-06-18 10:52:17

标签: javascript ios uiwebview

document.getElementById('sVIN').value = "1FMDU34X6RUC10442"

在这个webpage上的Mac上的谷歌Chrome控制台内运行 但不是在iPad UIWebView中使用:

[webview stringByEvaluatingJavaScriptFromString:javaScript];

没有错误日志,我可以在其他网站上运行javascripts,因此代码中没有问题。 可能的原因和解决方法是什么?

2 个答案:

答案 0 :(得分:1)

我检查过这个案例,而且代码无效。

但后来我创建了一个实验 - 我推迟了评估。 然后行动起作用了。

我先做的是:

- (void) test {
    [webview stringByEvaluatingJavaScriptFromString:javaScript];
}

然后使用:

[self performSelector:@selector(test) withObject:nil afterDelay:1];

它有效。 我想在DOM准备好之前你的代码正在评估。

有很多方法可以防止这种情况发生。

我们假设您无权访问该网站,因此所有服务器端javascripts(例如$(document).ready(){})都没有。

从iOS可以实现webView的完成回调:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [webview stringByEvaluatingJavaScriptFromString:javaScript];
}

不要忘记委托webview并将协议添加到父类:

webview.delegate = self;

我已经检查过并且有效。 万一它不适合你 - 网站出了问题,即使iOS webview认为它已经完成,它也没有准备好DOM。 如果是这样,结合我已经描述的两个分辨率 - 所以在webViewDidFinishLoad回调延迟后评估JS:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self performSelector:@selector(yourMethodWithJS) withObject:nil afterDelay:1];
}

我意识到最后的建议不是完全优雅的方法,而是如果您不负责修复网站,那么您必须做什么。

答案 1 :(得分:0)

尝试在模拟器中运行代码,然后转到Mac上的Safari并激活“开发”菜单,如果您还没有。

check Develop menu at the bottom

然后在Safari(在您的Mac上)点击开发 - >模拟器并选择有问题的UIWebview。这将为您提供一个检查器窗口来调试您的UIWebview。您可以像常规网站一样调试UIWebview。

希望这有帮助。