2017-01-05 7 views
0

私はいくつかのURLを読み込むWebViewを持っています。そのURLRequestのカスタムヘッダーを設定する必要があります。最初の要求に対しては期待通りに動作し、ヘッダはサーバ側で受信され、それに応じてコンテンツが表示されます。しかし、表示されたページから別のリンクを開くと、ヘッダーが失われ、ヘッダーなしでリクエストが送信されます。URLRequestヘッダーパーマネント

私の幸運なことに、ヘッダーは初めて追加されただけで、URLを読み込む要求が送信されるたびに追加する必要があります。しかし、私はそうすることができる方法を見つけることができませんでした。

override func viewDidLoad() { 
    super.viewDidLoad() 


    myWebView.delegate = self 

    let url = URL(string: "https://mywebsite.com"); 
    var requestobj = URLRequest(url: url!); 
    requestobj.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With"); 

    myWebView.loadRequest(requestobj); 

} 

のviewDidLoad

現在、私は設定していヘッダーは、私が何かをしないのですか私は、リクエストごとに別の場所にヘッダを追加する必要がありますか?

+1

はこのデリゲート関数 'FUNCのWebViewのを実装(_のWebView:のUIWebView、 shouldStartLoadWith要求:URLRequestの、 navigationType:UIWebViewNavigationType) - >このメソッドは、リクエストのURLを取得することができ呼び出されるのWebView内のすべての新しい要求のためBool'とURLが親URLでない場合は、追加されたヘッダーで新しいリクエストを作成できます。 – iphonic

+0

これはうまくいく可能性があります。ただし、ここでのリクエストは_immutable_ですので、新しい_var_、_addValue_にコピーする必要がありますが、どのようにWebViewに戻すことができますか? – Sapnix

+0

新しいリクエストを作成する必要があります.WebViewがナビゲーションをサポートしていて、URLの配列を維持する必要があり、ナビゲートする代わりに配列から毎回新しいリクエストを作成する必要がある場合です。 – iphonic

答えて

0

iphonicのおかげで、shouldStartLoadWithを指すようになりました。新しいか古いものを要求し、そうすることによって、私の問題を解決するためである私が理解するためにそれを使用できます。

func webView(_ webView: UIWebView, 
         shouldStartLoadWith request: URLRequest, 
         navigationType: UIWebViewNavigationType) -> Bool{ 


    if(navigationType == UIWebViewNavigationType.linkClicked) 
    { 

     var req = request; 

     req.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With"); 


     self.myWebView.loadRequest(req); 
      return false; 

    } 
    else { 
     return true; 
    } 



} 

だからここにナビゲーションタイプがclickedLinkであれば、私は、チェックし、その後、私は現在の要求をロードしない、代わりに私がコピーカスタムヘッダーを再適用し、myWebViewにロードします。 navigationTypeがlinkClickedでない場合、私は変更せずにリクエストを進めます。

1

はい、リクエストを作成するたびにカスタムヘッダーを追加する必要があります。

関連する問題