2015-08-29 3 views
0

Я создал UIWebView, где я прилагаемый параметр в URL:Swift - Изменение NSURLRequest в UIWebView

let url = NSURL(string: "http://localhost:8888/?apptype=native") 
    let request = NSURLRequest(URL: url!) 
    WebView.loadRequest(request) 

Когда я загрузить первую страницу в моем UIWebView параметр существует и я могу получить его с помощью PHP.

Но когда я переключаюсь на другую страницу, параметр исчезает, и я не могу получить его с URL-адреса, используя php на стороне сервера.

Так я нашел этот метод делегата:

func webView(WebViewNews: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    return true 
} 

Но как я могу добавить параметр каждый раз, когда новая страница загружается в UIWebView ??

Поздравления и благодарности!

+0

Можно ли добавить параметр? –

ответ

0

Вы можете вернуть значение false, а затем загрузить содержимое самостоятельно с помощью NSURLSession (или NSURLConnection), а затем ввести страницу в веб-представление, вызвав его метод loadData:MIMEType:textEncodingName:baseURL:.

Этот подход будет работать только для загрузок страниц, но не для других ресурсов, загружаемых страницей (CSS, JavaScript и т. Д.).

Для более полного подхода вы можете написать собственный класс NSURLProtocol. Пока вы регистрируете этот протокол по всему миру, этот подход должен работать для классов UIWebView. Возможно, вам придется зарегистрировать класс протокола, прежде чем создавать веб-представление.

В вашем пользовательском протоколе, когда вас просят начать подключение, вы сначала делаете измененную копию запроса и изменяете его любым способом, который вы хотите изменить. Затем вы помечаете запрос по-своему, вызывая setProperty: forKey: inRequest: и, наконец, вы повторно отправляете запрос, используя NSURLConnection или NSURLSession.

В вашем методе canInitWithRequest: проверьте, был ли запрос уже отмечен, и если да, верните НЕТ, чтобы нормальный класс протокола HTTP/HTTPS обработал запрос.