国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

工作中碰到的那些坑(二)-安卓混合開發webview打開鏈接出錯

2019-11-09 18:32:41
字體:
來源:轉載
供稿:網友
遇到的問題:
安卓混合開發,webview打開一個支付寶鏈接失敗報錯
18887-18887/com.doumi.bclient E/DefaultWebViewClient: webview error !!!!errorCode=-5,failingUrl=https://mapi.alipay.com/gateway.do?_input_charset=utf-8&it_b_pay=1d?ify_url=http://pay.jz.ganji.com/pay/notify/alipay.php&out_trade_no=2016031800029972&partner=2088121187952426&payment_type=1&return_url=http://m.vip.doumi.com/bwap/return/?rp=mobile&aPPType=client&uid=470715&charge_no=20160318145829289732347&seller_id=2088121187952426&service=alipay.wap.create.direct.pay.by.user&subject=%E5%95%86%E6%88%B7%E5%85%85%E5%80%BC&total_fee=0.01&sign=6673afba777e8cf4860e7b9326616c20&sign_type=md5,description=net::ERR_PROXY_CONNECTION_FAILED
分析:
step1: 在4.4以下的版本不出錯,4.4以上的版本才出錯step2: 抓包,得到服務器端傳回的鏈接,經測試能正常打開(如下):
https://mapi.alipay.com/gateway.do?_input_charset=utf-8&it_b_pay=1d?ify_url=http%3A%2F%2Fpay.jz-test.ganji.com%2Fpay%2Fnotify%2Falipay.php&out_trade_no=2016031800001416&partner=2088121187952426&payment_type=1&return_url=http%3A%2F%2Fm.vip.doumi.com%2Fbwap%2Freturn%2F%3Frp%3Dmobile%26apptype%3Dclient%26uid%3D117401%26charge_no%3D2016031814582987451524&seller_id=2088121187952426&service=alipay.wap.create.direct.pay.by.user&subject=%E5%95%86%E6%88%B7%E5%85%85%E5%80%BC&total_fee=10&sign=1f25c2ce1e53a952301b8ccaf60bae0f&sign_type=MD5step3:跟h5聯合調試,h5收到url以后就進行urlencode,傳回給native。(urlencode之后的鏈接如下)
https%3a%2f%2fmapi.alipay.com%2fgateway.do%3f_input_charset%3dutf-8%26it_b_pay%3d1d%26notify_url%3dhttp%253A%252F%252Fpay.jz-test.ganji.com%252Fpay%252Fnotify%252Falipay.php%26out_trade_no%3d2016031800001416%26partner%3d2088121187952426%26payment_type%3d1%26return_url%3dhttp%253A%252F%252Fm.vip.doumi.com%252Fbwap%252Freturn%252F%253Frp%253Dmobile%2526apptype%253Dclient%2526uid%253D117401%2526charge_no%253D2016031814582987451524%26seller_id%3d2088121187952426%26service%3dalipay.wap.create.direct.pay.by.user%26subject%3d%25E5%2595%2586%25E6%2588%25B7%25E5%2585%2585%25E5%2580%25BC%26total_fee%3d10%26sign%3d1f25c2ce1e53a952301b8ccaf60bae0f%26sign_type%3dMD5step4: native收到h5的鏈接以后進行urldecode( urlDecode以后的代碼如下),然后再從webview的loadUrlExt打開
https://mapi.alipay.com/gateway.do?_input_charset=utf-8&it_b_pay=1d?ify_url=http%3A%2F%2Fpay.jz-test.ganji.com%2Fpay%2Fnotify%2Falipay.php&out_trade_no=2016031800001416&partner=2088121187952426&payment_type=1&return_url=http%3A%2F%2Fm.vip.doumi.com%2Fbwap%2Freturn%2F%3Frp%3Dmobile%26apptype%3Dclient%26uid%3D117401%26charge_no%3D2016031814582987451524&seller_id=2088121187952426&service=alipay.wap.create.direct.pay.by.user&subject=%E5%95%86%E6%88%B7%E5%85%85%E5%80%BC&total_fee=10&sign=1f25c2ce1e53a952301b8ccaf60bae0f&sign_type=MD5截止到這一步為止,urldecode以后的url都能在瀏覽器里打開。。仔細對比報錯信息里的failingUrl和當前decode以后的url發現,failingUrl是decode以后再進行了一次decode得到的,這是為什么呢。。。
復習知識點:
Android4.4的發布,Android WebView改成由Chromium驅動了。之前是用webkit。Android4.4 webview有一個專門用于異步調用javaScript方法,evaluateJavascript() 。
root cause:
android4.4以及以上的webview都需要用evaluateJavascript() 調用javascript的方法。用loadUrl會自動進行一次urldecode,再將結果傳遞給javascript。為了規避這一問題,需要采用以下邏輯:
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)    {        try       {            aWebView.evaluateJavascript(aJS, null);       }        catch (Exception e)        {            aWebView.loadUrlExt("javascript:" + aJS);       }    }    else   {        aWebView.loadUrlExt("javascript:" + aJS);   }
參考資料:
Android 4.4 中 WebView使用注意事項  http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1920.htmlAndroid 4.4 WebView實現分析  http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1921.htmlAndroid JSBridge的原理與實現  http://blog.csdn.net/dj0379/article/details/50766238
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利辛县| 白山市| 棋牌| 衡水市| 江永县| 台安县| 东兰县| 建昌县| 施甸县| 循化| 九江市| 利辛县| 出国| 灵石县| 浠水县| 舒城县| 惠来县| 保康县| 鄂伦春自治旗| 太康县| 富宁县| 斗六市| 通化市| 德兴市| 木兰县| 宾川县| 瑞丽市| 扶沟县| 临西县| 江川县| 阿勒泰市| 阳曲县| 马关县| 镇雄县| 鄂州市| 莎车县| 呼玛县| 新竹市| 伊春市| 关岭| 克拉玛依市|