为什么 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 是一个值,该值将被解释为要打开的新网页的内容.有两种方法可以防止这种情况:

  1. 使用WebView.evaluateJavascript()(doc)代替WebView.loadUrl("javascript:...")。这也具有能够 return 评估结果返回 Java 而无需使用注入的 Java 对象的优点。

  2. 让你评估的Java脚本代码不为return值,像这样:

    • javascript:doSomething();void(0);

    • javascript:(function(){doSomething();})();

    第二种形式的优点是任何声明的变量都不会溢出到全局上下文中。