react-native 文檔里面有設(shè)置webview 頭部信息的寫法如下
可是設(shè)置了根本不起作用,不知道有沒有小伙伴遇到過同樣的問題,找了好多資料都沒有作用,最終各種嘗試下終于解決這個(gè)問題。
1、首先要研究一下webview的header從哪里來?
webview創(chuàng)建連接的時(shí)候服務(wù)器會返回一個(gè)session cookies,如圖,
cookie
安卓里面有一個(gè)CookieManager單例類,用來存儲和管理cookie的,在WebView創(chuàng)建連接之前,會通過CookieManager.getInstance().getCookie(url); 先獲取到這個(gè)cookie,然后保存到本地,存儲路徑如下
webview創(chuàng)建連接的時(shí)候會先判斷本地的這個(gè)cookie是否存在,如果存在再拿到這個(gè)cookie作為頭部創(chuàng)建連接,然后我們自己創(chuàng)建的header就不起作用了。
解決方法如下:
1、在進(jìn)入webview頁面的時(shí)候我們手動(dòng)檢查一下本地是否存在url的cookie,可以使用react-native-CookieManager第三方庫:
2、 構(gòu)建自己的header,上面打印的cookie值,OAOP_JSESSIONID=1365F51FBA11A8AFAC7D1536D3C501CD
這個(gè)sessionID作為我們作為自己的header里的一部分,一定不能替換成自己的,這個(gè)很重要,我試著把它換成別的結(jié)果連接失敗。
拿到這個(gè)以后去構(gòu)建自己的header,比如我自己創(chuàng)建的header
header = {
? ? 'cookie':OAOP_JSESSIONID=1365F51FBA11A8AFAC7D1536D3C501CD;TOKEN=123KFJSDK;
}
3、刪除本地的cookie,我是直接刪除了所有的cookie
CookieManager.removeAllCookies()
4、創(chuàng)建連接,就是讓組件顯示webview
this.setState({
? ? showWebview:true;
})
render(){
return( this.state.showWebview ??
( <WebView
? ? ? ? ? ? ? ? source={{
? ? ? ? ? ? ? ? ? ? uri:link,
? ? ? ? ? ? ? ? ? ? headers:header(自己構(gòu)建的) }} /> ) : null
)}
5、這個(gè)時(shí)候webview再從本地找cookie就找不到了,因?yàn)槲覀円呀?jīng)把它刪除了,就能用我們自定義的headerl