document.getElementById('sVIN').value = "1FMDU34X6RUC10442"
在这个webpage上的Mac上的谷歌Chrome控制台内运行 但不是在iPad UIWebView中使用:
[webview stringByEvaluatingJavaScriptFromString:javaScript];
没有错误日志,我可以在其他网站上运行javascripts,因此代码中没有问题。 可能的原因和解决方法是什么?
答案 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并激活“开发”菜单,如果您还没有。
然后在Safari(在您的Mac上)点击开发 - >模拟器并选择有问题的UIWebview。这将为您提供一个检查器窗口来调试您的UIWebview。您可以像常规网站一样调试UIWebview。
希望这有帮助。