ReactNative 當前url和cookies的獲取

前面大概介紹了react-native的運行helloword級別的入門,因此以後簡單的東西就不寫了,畢竟官網上都可以找到。javascript

reactnative官網:https://facebook.github.io/react-native/docs/getting-started.htmlhtml

reactnative中文網:http://reactnative.cn/docs/0.25/getting-started.htmljava

以後我會把工做中遇到的一些react-native的深坑分享一下。react

 

正題===========================git

客戶端cookies的獲取就是一個大坑。github

1.使用三方web

研究ReactNative的源碼發現,框架中並無實現iOS的NSHTTPCookieStorage的api,因此搜遍百度谷歌和bing,最終找到了一個哥們寫的第三方cookies工具:react-native

https://github.com/joeferraro/react-native-cookiesapi

這裏須要一提的是,我須要取得cookie不只是dictionary形式的cookies,而是用於http請求的cookiesHeader(比較特殊),其格式是string,在OC中取得的方式是:cookie

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

但這一塊原做者的框架中貌似存在必定的問題,因此我寫了一個pull request,具體能夠訪問我fork的項目:

https://github.com/rayshen/react-native-cookies

(若是你須要取得的Cookie是用來解析取值或是保存從新加入的,用get("url",res)或者getAll()函數取得的比較適合)

 

2.獲取當前url

這就須要結合webview控件來進行操做了。

首先咱們須要肯定當前的url,當前的url能夠從webview控件綁定的事件onNavigationStateChange去取得:

onNavigationStateChange={this.onNavigationStateChange.bind(this)}

 onNavigationStateChange(navState) {
     console.log(navState.url);
     this.curUrl = navState.url;
  }

 

3.取得url的cookie header:

 CookieManager.getHeader(this.curUrl, (err, res) => {
      console.log('Got cookies for url: ' + res.Cookie);
 })

 

4.取得url的全部cookies

CookieManager.get('http://example.com', (err, res) => {
  console.log(res);
})

  

5.取得當前全部的cookies

CookieManager.getAll((err, res) => {
  console.log('cookies!');
  console.log(err);
  console.log(res);
});

須要注意的是,getAll()和set()都是iOS Only的函數。

相關文章
相關標籤/搜索