Android Webview增加自定義userAgent、headers打賞

最近維護公司app,要內嵌在線網站進來,因為在線移動網站是類似常見商城的形式,底部有幾個導航按鈕,而app內嵌的情況想從網頁層面控制頁面的返回,同時再針對app內嵌情況下的界面做一些控制。

可能前面說得比較晦澀難懂,下面舉個例子,比如,頁面有12345五個底部導航,默認進首頁(1),當點擊2345的時候,在android下點擊原生返回鍵還會回到首頁(1),這樣的效果體驗不是很好,所以頁面全局攔截a鏈接,通過js采用location.replace來做跳轉,這樣一來,只要內部頁面沒有直接跳回12345五個頁面的操作,整體跳轉體驗應該和app類似了。

另一個問題,要做微信分享,但是眾所周知,網頁目前是不可能直接分享到微信(除了二維碼形式),所以這里在定義了特定協議,網頁請求如share://share?title=樸人博客&content=樸人博客…,原生app內接收后解析處理,在webview上彈出分享界面。

當然,這不是今天的重點,重點是這里頁面的分享按鈕要根據是否app內嵌來選擇是否顯示,這里就要加一個特殊標識,最初通過url參數形式增加,但是并不完美,需要解析url再增加參數,分享時還需要把參數移除,比較繁瑣。后面希望采用userAgent形式,但是iOS的同學發現iOS攜帶userAgent比較麻煩,攜帶headers比較簡單,故iOS采用了自定義headers來標識來自app。

android實現比較坑的是,通過webView.loadUrl(String url,Map headers),可以實現首次請求攜帶自定義頭,而我們頁面內點擊跳轉同樣需要自定義頭,按照網上普遍的解決方案,在shouldOverrideUrlLoading方法內部再次調用view.loadUrl(String url,Map headers),看似沒問題的解決方案,實際測試發現,這樣一來,相當于新增了一個頁面請求,如果頁面使用js進行了跳轉,使用原生返回鍵或者js內使用history.back()時,只能返回js跳轉前的頁面,即使跳轉時使用的是location.replace,也無濟于事。查遍文檔無果,最后選擇采用userAgent形式攜帶固定標識。代碼如下:

WebSettings webSettings = getSettings();
webSettings.setUserAgentString(webSettings.getUserAgentString() + " Poorren/android");

android設置userAgent的方式還是挺簡單的,雖然方案不統一,還是基本解決了需求,暫且就這樣用了,這里僅記錄一下。

Android Webview增加自定義userAgent、headers
文章《Android Webview增加自定義userAgent、headers》二維碼
  • 微信打賞
  • 支付寶打賞

已有1條評論

  1. 羽寶博客

    博主的文筆很不錯,仰慕已久,特來拜會。若能有幸能得到博主的回訪,必將欣喜若狂

    2017-02-24 12:48 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖