为什么javascript:on webview会导致新页面?

时间:2015-05-18 01:07:05

标签: javascript android webview

所以我一直在尝试在互联网上搜索,如果有类似的东西,但我无法找到我想要的东西。

无论如何,我的问题是当使用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代码。

1 个答案:

答案 0 :(得分:1)

在Chrome和较新版本的WebView上,如果javascript:网址返回值,则此值将被解释为要打开的新网页的内容。有两种方法可以防止这种情况:

  1. 使用WebView.evaluateJavascript() (doc)代替WebView.loadUrl("javascript:...")。这还具有能够在不使用注入的Java对象的情况下将评估结果返回给Java的优点。

  2. 让您评估的Javascript代码不返回值,如下所示:

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

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

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