我有一個應用程序,其中包含先前存在的基於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」中注入風格標籤嗎?或者,如果不是,我還能嘗試什麼?
我試過onLoadResource,它似乎可以正常工作,但它也正在清除我想要的頁面上的一半內容。我的代碼是wv.loadUrl(「javascript:function(){document.getElementsByTagName('body')[0] .innerHTML + ='';}()」);你知道爲什麼它會這樣做嗎? – Dave