Можете ли вы перехватить NSURLRequests в UIWebView, не сломав кнопку возврата?

У меня проблемы с загрузкой пользовательского HTML в мой UIWebView без нарушения его метода goBack .

Что работает

Я перехватываю URL-запросы моего UIWebView , чтобы я мог загрузить собственный HTML. У меня есть контроль над всем HTML, поэтому в моих специальных запросах приложений используется настраиваемая схема (например, myapp: // arg1 /? arg2 = val ), который я могу проанализировать в webView: shouldStartLoadWithRequest: navigationType: . Я решаю, какой HTML мне действительно нужен, и вызываю loadHTMLString: baseURL и возвращаю NO , чтобы отменить исходный запрос.

Что не работает

Вышеупомянутое отлично работает . Проблема в том, что я хочу использовать метод UIWebView goBack и loadRequest: , похоже, единственный метод UIWebView , который добавляет в его историю стек.

У меня есть несколько идей, но я не уверен, какие из них осуществимы и как их реализовать. Похоже, главное, что я должен вернуть YES в webView: shouldStartLoadWithRequest: navigationType , и я должен использовать UIWebView ' Могу ли я создать подкласс NSURLRequest, чтобы (когда UIWebView делает запрос) он фактически не выполнял HTTP-запрос и возвращал NSURLResponse с моим HTML-кодом в нем? Или, может быть, каким-то образом изменить / подклассифицировать / добавить метод категории в NSURLResponse? Мне нравится идея, что это настоящий запрос, но меня беспокоят частные API-интерфейсы и их отклонение из App Store.

Идея 2: Обработка настраиваемого протокола URL Зарегистрируйте настраиваемый протокол URL, чтобы мое приложение реагировало на него, и я мог вернуть ему законный ответ NSURLResponse (заполненный моим настраиваемым HTML).

Идея 3: обмануть кеш Создайте запрос с этой политикой кеширования NSURLRequestReturnCacheDataDontLoad , а затем каким-то образом получить мой HTML-код между webView и кешем?

Или, может быть, я полностью ошибаюсь?

13
задан zekel 10 February 2016 в 21:32
поделиться