为什么 javascript: on webview 会跳转到一个新页面?
Why does javascript: on webview lead to a new page?
所以我一直试图在互联网上搜索是否有类似的东西,但我找不到我要找的东西。
无论如何,我的问题是当使用 webview.loadUrl("javascript: [javascript].value = 'value'")
或类似于更改 属性 的东西时,例如 innerhtml
,它总是将 return 值打开为不同的值页。我不确定它为什么这样做,但在 Google Chrome 上,它似乎做同样的事情。所有关于如何在 WebView 上使用 javascript 的教程都使用与我在页面上执行 javascript 相同的方法;但是,他们似乎没有在新页面上打开回复。
我正在寻找一种将 javascript 注入页面而无需单独加载 window.
的方法
这是我的代码:
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 代码。
在 Chrome 和较新版本的 WebView 上,如果 javascript:
URL return 是一个值,该值将被解释为要打开的新网页的内容.有两种方法可以防止这种情况:
使用WebView.evaluateJavascript()
(doc)代替WebView.loadUrl("javascript:...")
。这也具有能够 return 评估结果返回 Java 而无需使用注入的 Java 对象的优点。
让你评估的Java脚本代码不为return值,像这样:
javascript:doSomething();void(0);
javascript:(function(){doSomething();})();
第二种形式的优点是任何声明的变量都不会溢出到全局上下文中。
所以我一直试图在互联网上搜索是否有类似的东西,但我找不到我要找的东西。
无论如何,我的问题是当使用 webview.loadUrl("javascript: [javascript].value = 'value'")
或类似于更改 属性 的东西时,例如 innerhtml
,它总是将 return 值打开为不同的值页。我不确定它为什么这样做,但在 Google Chrome 上,它似乎做同样的事情。所有关于如何在 WebView 上使用 javascript 的教程都使用与我在页面上执行 javascript 相同的方法;但是,他们似乎没有在新页面上打开回复。
我正在寻找一种将 javascript 注入页面而无需单独加载 window.
的方法这是我的代码:
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 代码。
在 Chrome 和较新版本的 WebView 上,如果 javascript:
URL return 是一个值,该值将被解释为要打开的新网页的内容.有两种方法可以防止这种情况:
使用
WebView.evaluateJavascript()
(doc)代替WebView.loadUrl("javascript:...")
。这也具有能够 return 评估结果返回 Java 而无需使用注入的 Java 对象的优点。让你评估的Java脚本代码不为return值,像这样:
javascript:doSomething();void(0);
javascript:(function(){doSomething();})();
第二种形式的优点是任何声明的变量都不会溢出到全局上下文中。