我遇到的问题是将一些JavaScript注入WebView。我只在Android版本2.3.6及以下版本中遇到此问题我假设,测试设备不会低于此版本。我的代码在Android 4+中运行良好,所以我不太确定它为什么会失败。似乎"提交"表格,但没有填写2.3.6中的用户名和密码字段,所以它总是失败。我的主要目标是模拟表单填写并使用两个EditTexts在WebView中提交,这样用户就不必与WebView本身进行交互。当用户点击登录按钮时,它会运行以下代码:
//Set what needs to be filled out in the WebView
String javaScript = "(function(){ " +
"document.getElementById('user').value = '" + mUsername + "'; " +
"document.getElementById('password').value = '" + mPassword + "'; " +
"document.getElementById('form').submit(); " +
"})()";
//Load the javascript here
mWebView.loadUrl("javascript: " + javaScript);
我还将我的WebView设置设置为:
//Setup the WebView options/settings
...
mWebView.getSettings().setSaveFormData(false);
mWebView.getSettings().setJavaScriptEnabled(true);
...
我已经尝试寻找为什么这不会对2.3.6起作用的任何原因但是没有想出任何东西。版本2中是否存在某些限制。* 4 +?
中没有编辑:运行上述代码的按钮仅在页面加载完成后启用。因此,当单击此按钮时,将运行上面的JS注入。
@Override
public void onPageFinished(WebView view, String url) {
...
//Only allow the user to inject the JS when the page has loaded
if(url.equals("...")
button.setEnabled(true);
...
}
解决方案:我不确定这是否真的是原因,但改变JS代码中的单引号以使用双引号似乎使它运行。类似的东西:
String javaScript = ... + "document.getElementById(\"user\").value = \"" + mUsername + "\"; "
答案 0 :(得分:0)
我没有任何限制,但在不同版本的Android中遇到源自不同Javascript引擎的问题并不罕见。这可能只是尝试不同的语法来实现相同的结果,试图找到使该版本的Javascript满意的逻辑版本。
包含JQuery并使用Jquery语法编写函数也可能是一种解决方案。由于JQuery本身似乎非常善于处理这些差异。
答案 1 :(得分:0)
您的流程中的哪一点会加载JavaScript URL?您确定此时DOM已加载且您引用的元素有效吗?
在尝试执行JavaScript时,您是否在logcat中看到任何输出?这应该显示JavaScript错误。