所以我一直在尝试在互联网上搜索,如果有类似的东西,但我无法找到我想要的东西。
无论如何,我的问题是当使用webview.loadUrl("javascript: [javascript].value = 'value'")
或类似于更改属性的内容时,例如innerhtml
,它始终会将返回值打开到其他页面。我不确定为什么会这样做,但在谷歌浏览器上,它似乎做了同样的事情。关于如何在WebView上使用javascript的所有教程都使用我用来在页面上执行javascript的相同方法;然而,他们似乎并没有将回复打开到新的页面上。
我正在寻找的是一种将javascript注入页面的方法,而无需加载单独的窗口。
这是我的代码:
WebView webView = (WebView) findViewById(R.id.carTaxWebView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript: document.getElementById('ctl00_ContentPlaceHolderBody_vin').value = '" + MainPage.getActivityInstance().getCar().getVin() + "';");
}
});
webView.loadUrl("http://onlinemvd.dor.ga.gov/tap/option1.aspx#message");
我想让它在用户加载页面后自动填写VIN代码。
答案 0 :(得分:1)
在Chrome和较新版本的WebView上,如果javascript:
网址返回值,则此值将被解释为要打开的新网页的内容。有两种方法可以防止这种情况:
使用WebView.evaluateJavascript()
(doc)代替WebView.loadUrl("javascript:...")
。这还具有能够在不使用注入的Java对象的情况下将评估结果返回给Java的优点。
让您评估的Javascript代码不返回值,如下所示:
javascript:doSomething();void(0);
javascript:(function(){doSomething();})();
第二种形式的优点是任何声明的变量都不会溢出到全局上下文中。