2015-05-18 60 views
0

所以我一直在試圖在互聯網上搜索,如果有類似的東西,但我只是找不到我在找什麼。爲什麼javascript:在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

在Chrome和更新版本的WebView上,如果javascript: URL返回值,則該值將被解釋爲新網頁打開的內容。有兩種方法來防止這種情況:

  1. 使用WebView.evaluateJavascript()(doc)而不是WebView.loadUrl("javascript:...")。這也具有能夠在不使用注入的Java對象的情況下將評估結果返回給Java的優點。

  2. 請您評價Javascript代碼不返回值,就像這樣:

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

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

    第二種形式的優點是任何聲明的變量會不會蔓延到全球範圍內。

+0

看起來像是在Android 22上引入的方法,我仍然在21,但我的手機使用Lollipop 5.0.1。後者適用於我的情況,非常感謝! – Muhatashim

+0

在API級別19(KitKat)中添加了「evaluateJavascript」方法。看看你的應用清單中指定了什麼'minimumSdkLevel',如果它看起來像你不能使用它。 –

+0

是的,我用21分鐘,所以這很奇怪。 – Muhatashim

相關問題