2017-01-05 4 views
0

У меня есть webView, в котором я загружаю URL-адрес. Мне нужно установить настраиваемый заголовок для этого URLRequest. Для первого запроса он работает как ожидалось, заголовок принимается на стороне сервера, и содержимое отображается соответствующим образом. Однако, если я открываю другую ссылку с отображаемой страницы, заголовки теряются и запрос отправляется без заголовка.URLRequest заголовок постоянный

Моя счастливая догадка заключается в том, что заголовок добавляется только в первый раз, и я должен добавлять его каждый раз, когда отправляется запрос на загрузку URL-адреса. Однако я не мог найти способ, где я могу это сделать.

заголовка В настоящее время я устанавливаю в viewDidLoad

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); 

} 

Могу ли я что-то отсутствует, или я должен добавить заголовок в другом месте для каждого запроса?

+1

Реализовать этот делегат функции 'Func WebView (_ Webview: UIWebView запрос shouldStartLoadWith: URLRequest, navigationType: UIWebViewNavigationType) -> Bool' для всех новый запрос в WebView этот метод вызывается вы можете получить URL запроса и вы можете создать новый запрос с добавленным заголовком, если 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 не связан с кликом, я отправляю запрос без изменений.

1

Да, вы должны добавлять пользовательские заголовки каждый раз при создании запроса.

Смежные вопросы