2012-09-19 29 views
2

我有一個應用程序,其中包含先前存在的基於Web的註冊過程,我嘗試在WebView中使用它。我需要添加一些樣式標籤到html中,以便隱藏一些元素以更好地顯示我的應用程序中的內容。我可以讓它在初始加載時工作,但我無法弄清楚如何在WebView中從一個頁面到另一個頁面進行操作。下面是我的工作:在加載Url之前將內容注入到WebView中

在該網站上的初始負荷,我得到的原始HTML和附加"<style>MY STYLES HERE< /樣式>」的字符串調用

wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url); 

這工作完全之前,但如果用戶點擊頁面上的鏈接,它加載其他頁面到WebView中,那麼這段代碼不會被調用和風格標籤丟失。

我想我需要在WebViewClient覆蓋「shouldOverrideUrlLoading」,但我不不知道如何攔截這裏的html,我想我會嘗試這樣的:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    String rawHtml = getRawHtml(url) + "<style>...</style>"; 
    wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url); 
} 

但是,這顯然發送到無限循環攔截負載開始新的負載。

我自己也嘗試重寫onPageFinished和做:

wv.loadUrl("javascript:(function() { ... })()"); 

它的工作原理,但它一直等待,直到整個頁面被執行之前加載。這會導致頁面顯示加載所有UI元素,然後我試圖隱藏的所有元素突然消失。我的最終目標是在移動設備上增強網站的外觀和體驗,因此這不是一種選擇。

我還可以在「shouldOverrideUrlLoading」中注入風格標籤嗎?或者,如果不是,我還能嘗試什麼?

回答

0

我遇到了這個問題,並根據重定向的數量等,我們一直無法使注入的JavaScript可用。

至少應使用wv.loadUrl("javascript:(function() { ... })()");方法,但在onPageStarted()和onPageFinished()方法中調用它。

根據頁面的複雜程度,您可能還需要在onLoadResource()中注入JavaScript。

+1

我試過onLoadResource,它似乎可以正常工作,但它也正在清除我想要的頁面上的一半內容。我的代碼是wv.loadUrl(「javascript:function(){document.getElementsByTagName('body')[0] .innerHTML + ='';}()」);你知道爲什麼它會這樣做嗎? – Dave