Сопоставьте NSURLRequest с UIWebView

В iOS я хотел бы иметь возможность связать NSURLRequest--любой NSURLRequest, будь то запрос навигации, запрос изображения или таблицы стилей, с отправившим его UIWebView. Кажется, это требует реализации подкласса NSURLProtocol для захвата и анализа запросов по мере их поступления. Однако я не могу найти способ сопоставить запрос с его веб-представлением, а NSURLProtocol, кажется, понимает только NSURLRequests.

Это было бы хорошо для навигационных запросов, так как я мог бы создать ассоциацию в своем файле UIWebViewDelegate. Но это не будет работать для вторичных запросов ресурсов, таких как изображения, которые не вызывают UIWebViewDelegate методы.

Кто-нибудь есть какие-либо мысли о том, как лучше всего сделать эту ассоциацию?


person KevinH    schedule 25.10.2012    source источник
comment
NSURL *url = [NSURL URLWithString:urlAddress]; //Создать объект URL. NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; // Объект запроса URL [web loadRequest: requestObj];   -  person Kamleshwar    schedule 25.10.2012
comment
Если этот NSURLRequest получает ответ HTML, содержащий, скажем, теги img, UIWebView автоматически запускает вторичные запросы для получения этих данных. Я также хочу сопоставить эти запросы.   -  person KevinH    schedule 25.10.2012


Ответы (2)


Если я правильно понял ваш вопрос, вы можете просто сделать NSURL *url = [[webView request] URL];

person eulr    schedule 11.04.2013
comment
Если у меня есть веб-страница на www.yahoo.com со ссылкой на изображение на maps.google.com, свойство URL UIWebView не будет иметь связи с URL-адресом, представленным в запросе изображения. - person KevinH; 12.04.2013

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

Ваш вопрос о ссылочных ресурсах привел меня к этому открытию, которое позволило мне решить проблему с кэшированием, с которой я столкнулся.

Спасибо, и я надеюсь, что это поможет в ответ!

person Lytic    schedule 02.08.2017