小編給大家分享一下Android Webview攔截ajax請求的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)建站長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為徐州企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,徐州網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
Android Webview雖然提供了頁面加載及資源請求的鉤子,但是對于h6的ajax請求并沒有提供干涉的接口,這意味著我們不能在webview中干涉javascript發(fā)起的http請求,而有時候我們確實需要能夠截獲ajax請求并實現(xiàn)一些功能如:統(tǒng)一的網(wǎng)絡(luò)請求管理、cookie同步、證書校驗、訪問控制等。
思路
雖然在 Webview中無法直接攔截 ajax請求(其實在shouldInterceptRequest 中是可以收到ajax請求的,但是遺憾的是取不到請求參數(shù),這樣也是沒有意義的), 我們可以轉(zhuǎn)換思路,能不能在js中將所有的請求轉(zhuǎn)發(fā)到native中,這樣也就達到了相同的目的。如果可以,那就需要一種在javascript和native之間通信的橋梁(javascript bridge),通過它,javascript將請求信息傳遞給native, native完成真正的請求后再將結(jié)果數(shù)據(jù)傳遞給javascript。那么我們的思路就是:
在javascript中攔截所有ajax請求,然后通過javascript bridge將請求信息傳遞給native
native收到請求信息后,進行一些與處理邏輯,然后完成本次請求,將請求結(jié)果通過javascript bridge再回傳給javascript.
這樣,在第二步native上收到請求信息后,我們就可以進行統(tǒng)一的網(wǎng)絡(luò)請求管理、cookie同步、證書校驗、訪問控制。思路雖然簡單,但實現(xiàn)起來卻是比較麻煩,因為需要前端和native都需要做不少的工作。那么有什么簡單的方法嗎?當然有!
輪子
fly.js 是一個支持請求重定向的輕量級、跨平臺的Javascript http請求庫 ,前端可以使用它輕松發(fā)起網(wǎng)絡(luò)請求,它會自動將請求轉(zhuǎn)發(fā)至native. 現(xiàn)在解決了第一個問題,接下來我們需要選一個javascript bridge, 而現(xiàn)在開源的javascript bridge挺多,你可以選擇任意一個你喜歡的。但是,在此強烈推薦一下 DSBridge 它是一個使用非常簡單并支持同步的跨平臺javascript birdge, 最關(guān)鍵的是, DSBridge 的demo中就有接收處理fly.js轉(zhuǎn)發(fā)的http請求的示例,并且給出了okhttp的實現(xiàn),并且,fly.js](https://github.com/wendux/fly) 官方也提供了DSBridge 的adapter. 下面我們以DSBridge為例,演示一下整個過程:
實例
前端
//引入dsbridge adapter
var adapter = require("flyio/dist/npm/adapter/dsbridge")
var EngineWrapper = require("flyio/dist/npm/engine-wrapper")
var dsEngine = EngineWrapper(adapter)
var fly = new Fly(dsEngine);
//接下來,通過fly發(fā)起的ajax請求都會轉(zhuǎn)發(fā)到native上
fly.post('/user', {
name: 'Doris',
age: 24
phone:"18513222525"
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});Native端
@JavascriptInterface
public void onAjaxRequest(JSONObject jsonObject, final CompletionHandler handler){
//jsonObject 為fly adapter 傳給端的requerst對象
//端上完成請求后,將響應(yīng)對象通過hander返回給fly adapter
//hanlder(response)
}fly.js中dsbridge的adapter會調(diào)用Native的 onAjaxRequest方法,native只需實現(xiàn)這個方法即可
看完了這篇文章,相信你對“Android Webview攔截ajax請求的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當前題目:AndroidWebview攔截ajax請求的示例分析
網(wǎng)站URL:http://www.yijiale78.com/article12/pehegc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化、網(wǎng)站維護、網(wǎng)站排名、關(guān)鍵詞優(yōu)化、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)