androidwebview錯誤
⑴ Android的WebView有哪些坑
下面說說我比較困惑的幾個地方。
1.WebViewClient.onPageFinished()。你永遠無法確定當WebView調用這個方法的時候,網頁內容是否真的載入完畢了。當前正在載入的網頁產生跳轉的時候這個方法可能會被多次調用,StackOverflow上有比較具體的解釋(How to listen for a Webview finishing loading a URL in Android?), 但其中列舉的解決方法並不完美。所以當你的WebView需要載入各種各樣的網頁並且需要在頁面載入完成時採取一些操作的話,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠譜一些。
2.WebView後台耗電問題。當你的程序調用了WebView載入網頁,WebView會自己開啟一些線程(?),如果你沒有正確地將WebView銷毀的話,這些殘余的線程(?)會一直在後台運行,由此導致你的應用程序耗電量居高不下。對此我採用的處理方式比較偷懶,簡單又粗暴(不建議),即在Activity.onDestroy()中直接調用System.exit(0),使得應用程序完全被移出虛擬機,這樣就不會有任何問題了。
3.切換WebView閃屏問題。如果你需要在同一個ViewGroup中來回切換不同的WebView(包含了不同的網頁內容)的話,你就會發現閃屏是不可避免的。這應該是Android硬體加速的Bug,如果關閉硬體加速這種情況會好很多,但無法獲得很好的瀏覽體驗,你會感覺網頁滑動的時候一卡一卡的,不跟手。
4.數據積累問題。開啟緩存什麼的有利於網頁的瀏覽體驗,但你會發現即使是清除了必要的內容,比如Cache、Cookie、Form Data、History、Password等等東西,你的應用程序所佔用的存儲空間還是會越來越大,到最後只好手動到系統設置的應用信息界面里清除數據了 :(
5.滾動條問題。Android System WebView的橫向滾動條真是好粗的有木有...
6.注意4.4系統前後的區別,在這個版本裡面谷歌把webview的內核換成谷歌瀏覽器的!
7.在webview中進行JavaScript交互時也要注意,出於對安全性的考慮,在設置與JavaScript有關的選項時,需要在所在方法的前面加上@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" }),不然4.2以上調用js會出現問題;
8.在調用loaddata方法時注意與loaddatawithurl的區別,前者要注意編碼問題而且容易出於亂碼問題,後者默認utf8編碼!
另外針對Android System WebView的相關開發,推薦看看Google官方的示例教程 GoogleChrome/chromium-webview-samples · GitHub
⑵ 如何解決Android WebView出現的亂碼問題
1、webView.loadUrl();
直接顯示網頁內容(單獨顯示網路圖片),一般不會出現亂碼。
2、webView.loadData(data, "text/html", "UTF-8");
loadData主要被設計用來裝載URI格式的數據,它不能通過網路來載入內容。網上流傳的webview載入中文出現亂碼,多數是使用此方法。使用過程中主要有兩個問題:
(1)loadData不能載入圖片內容,如果想載入圖片內容或者獲得更強大的Web支持建議使用更強大的loadDataWithBaseURL.
(2) 許多實用loadData方法的朋友都遇到顯示亂碼的問題,那是因為編碼器設置錯誤導致的。我們知道String類型的數銷鎮據主要是unicode編碼,而WebView一般為了節省資源使用的是UTF-8編碼,所以我們在loadData的時候要告訴方法怎樣轉碼。即要告訴它要將unicode編碼的內容轉成UTF-8編碼的內容。有些朋友雖然在loadData的時候設置了編碼方式,但是還是顯示亂碼,這是因虧消粗為還需要為WebView的text編碼指定編碼方式。舉例如下:
WebView wv = (WebView)findViewById(R.id.webview) ;
wv.getSettings().setDefaultTextEncodingName(「UTF -8」) ;
wv.loadData(content, 「text/html」橋碰, 「UTF-8」) ;
注意為gb2312或gbk
(3).網頁說明編碼格式
以上兩種方法是網上給的比較好的方法,但是我都試了下都沒有解決我的亂碼問題。 原來我是用LoadData方法來解析html的,但是據說這是官方的一個BUG,不能用來解析中文。所以繞其道而行之,採用loadDataWithBaseURL的方法,其中codeingType設置為utf-8就OK了。3、loadDataWithBaseURL如果單純顯示文字的話可以寫webView.loadDataWithBaseURL(null, string, "text/html", "utf-8", null);
如果要顯示圖片可以寫webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
其中baseUrl為你存儲照片的路徑,比如:
⑶ 【安卓開發】系統級APP使用webview時出錯
如果你開發的APP是系統級的,即在AndroidManifest.xml的manifest下讓笑添加了android:sharedUserId="android.uid.system",那麼你在使用webview的時候可能會出現辯棗如下錯誤 :Error inflating class android.webkit.WebView
解決方式,在調用webview的activity或者fragment的setContentView()之前,調攜滑拆用文中末尾的initStatusBar()方法即可正常運行。
⑷ Android WebView 載入網頁 樣式錯誤
這個就是明顯的瀏覽禪兄器兼容性問題了
做web前端賀豎襲開發最常見的一個問題,就是瀏覽器兼容問題
建議:
使用HTML5開進行開發纖知
使用ccs3的相差屬性來控制樣式
使用google瀏覽器來調式界面
⑸ Android WebView 載入失敗(net::ERR_CLEARTEXT_NOT_PERMITTED)
首先保證App申明了網路許可權
<uses-permission android:name="android.permission.INTERNET" />
1
解決辦法(1):
在Application中打開一個開關
<manifest ...>
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
解決辦法(2):
res 下新建 xml 目錄,創建文件:network_security_config.xml ,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
1
2
3
4
在 AndroidManifest.xml 的 application 標簽添加配置:
<manifest ...>
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
解決辦法(3):【推薦】
伺服器和本地應用都改用 https
解決辦法(4):
targetSdkVersion 降級回到 27
⑹ Android的WebView載入網頁後出現ERR_UNKNOWN_URL_SCHEME
Android里戚激使用WebView,如果其鏈接里含有打開其他app的網頁鏈接,可能會出現ERR_UNKNOWN_URL_SCHEME的情況。如下圖:
解決方法:
當WebView 載入路徑里,未以http,或者握桐https開頭時,嘗試以Intent 打高皮襪開其他app,如果打開失敗(本設備未安裝此app),則繼續載入。
如此一來,可正確載入URL。
⑺ Android WebView 在開發過程中有哪些坑
多線程 如果在子線程中調用WebView的相關方法,而不在UI線程,則可能會出現無法預料的錯誤。 所以,當程序中需要用到多線程時候,也請使用 runOnUiThread()方法來保證關於WebView的操作是在UI線程中進行的: runOnUiThread(newRunnable(){ @Ov...
首先webview可以載入兩種:1.帶標簽的富文本;2.網頁地址。 1、載入富文本: webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 其中,加粗的地方是服務端返回的String類型的富文本,"text/html"是轉換類型,utf-8是編碼格...
下面說說我比較困惑的幾個地方。 1.WebViewClient.onPageFinished()。你永遠無法確定當WebView調用這個方法的時候,網頁內容是否真的載入完畢了。當前正在載入的網頁產生跳轉的時候這個方法可能會被多次調用,StackOverflow上有比較具體的解釋(...
注意4.4系統前後的區別,在這個版本裡面谷歌把webview的內核換成谷歌瀏覽器的! 在webview中進行JavaScript交互時也要注意,出於對安全性的考慮,在設置與JavaScript有關的選項時,需要在所在方法的前面加上@SuppressLint({ "JavascriptInterfac...
自Android 4.4起,引入了webView,使用需要注意的事項: 1.多線程 如果你在子線程中調用WebView的相關方法,而不在UI線程,則可能會出現無法預料的錯誤。 所以,當你的程序中需要用到多線程時候,也請使用 runOnUiThread()方法來保證你關於WebVi...
Android開發需要注意的幾項: 1、導入的類庫需要和項目在同級目錄下,謹防資源文件與類庫中沖突。 2、textviewsetText為int時候,textview的color代碼設置,set/getTextSize 單位問題。 3、json 屬性節點不能有空格。 4、asset下使用第三方字體 ...
自Android 4.4起,引入了webView,使用需要注意的事項: 1.多線程 如果在子線程中調用WebView的相關方法,而不在UI線程,則可能會出現無法預料的錯誤。
⑻ android _10 WebView_ERR_INVALID_ARGUMENT
在使用webView的時擾瞎春候android10在傳header(請求頭)其中有一個 key 命名為 host 的時候神兄報此錯誤。10以下一切正常。具體沒有去深究為緩耐什麼。如果出現此錯誤檢查請求頭key值。
參數無效 ERR_INVALID_ARGUMENT