2011-04-28 68 views
7

我有WebView,它加載了一些頁面,當它完成時,我應用了一些JavaScript魔法來搞砸DOM。一切都很好,頁面加載和onPageFinished我只是叫wv.loadUrl(javascript);Android WebView + loadUrl with javascript + onPageFinished = lag

但我不希望看到加載過程中,和JavaScript是如何工作的,我只需要結果,所以我從一開始就做了我的觀點與無形wv.setVisibility(View.INVISIBLE);,並在一切完成後再次顯示。這是發生問題的地方。

這段代碼應該在JavaScript完成後讓視圖可見,但wv.setVisibility(View.VISIBLE)會在javascript之前觸發。所以有一段時間我會看到頁面以及它如何被javascript改變。這只是醜陋的。

public void onPageFinished (WebView view, String url) { 
     wv.loadUrl(javascript); 
     view.getSettings().setLoadsImagesAutomatically(true); 
     wv.setVisibility(View.VISIBLE); 

    } 

我得到了使用loadURL以異步方式工作,所以我試着與公正「做出第一個視圖中看到」裏面onPageFinished方法的另一個WebViewClient,並用它來調用JS。但它只是不斷與NPE錯誤崩潰。

wv2.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished (WebView view, String url) { 
    wv.setVisibility(View.VISIBLE); 
} 
}); 

對JavaScript(SystemClock.sleep(5000))後,現在我只是添加的延遲,但是這就像..是啊。

回答

1

好吧,我想我想通了。我們可以從JavaScript的末尾回調「show view」,比如herehere(帶處理程序,因爲我想更新ui)。 但它不會改變任何東西,問題似乎在渲染速度。這只是緩慢。所以現在我只會在JS發射後延遲1秒。

+1

我認爲我們有這個bug的解決方案:http://android-know-how-to.blogspot.co.il/2013/08/android-webview-javascript-onpagefinish.html – TacB0sS 2013-08-19 13:37:48

0

我不認爲你會得到一個簡單的解決方案。 Android可以檢測到的所有內容(如大多數瀏覽器)都是在頁面完全加載時,這意味着所有內容都已下載。 Javascript也等待它被下載,然後THEN開始運行。這只是它的工作方式。我能想到的唯一解決方案可能只是在JQuery中。我對此不太瞭解,但通常有解決方案來解決這個問題。

+1

這不是檢測頁面是否加載的問題。問題是爲什麼其他在JavaScript之前發射的方法完成了? – Sver 2011-04-28 14:58:49

+0

因爲從技術上講,並根據您的瀏覽器,頁面完成加載。 Javascript正在運行,而頁面呈現是兩個完全分開的東西。只有當頁面完全下載時,Javascript纔會運行,並且只能在頁面完全下載時檢測到。我不是Javascript或JQuery方面的專家,但我確實認爲如果有JQuery問題的話,你會發現你的解決方案。 – NotACleverMan 2011-04-28 15:11:02

相關問題