У меня возникли проблемы с загрузкой пользовательского HTML в мой UIWebView
без нарушения его метода goBack
.
Что работает
Я перехватываю URL-запросы моего UIWebView
, чтобы загрузить пользовательский HTML. У меня есть контроль над всем HTML, поэтому у меня есть специальные приложения, которые используют пользовательскую схему (т.е. myapp://arg1/?arg2=val
), которую я могу проанализировать в webView:shouldStartLoadWithRequest:navigationType:
. Я решаю, какой HTML я действительно хочу загрузить, и вызовите loadHTMLString:baseURL
и верните NO
, чтобы отменить исходный запрос.
Что не работает
Вышеизложенное отлично работает. Проблема в том, что я хочу использовать метод UIWebView's
goBack
, а loadRequest:
- единственный метод UIWebView
, который добавляет его в стек истории.
У меня есть несколько идей, но я не уверен, какие из них возможны и как их решать. Главное, что мне нужно вернуть YES
в webView:shouldStartLoadWithRequest:navigationType
, и мне нужно использовать метод UIWebView
loadRequest
.
Идея 1: Изменить NSURLRequest/Response: Могу ли я подклассировать NSURLRequest, чтобы (когда UIWebView делает запрос), он фактически не делает HTTP-запрос и возвращает NSURLResponse с моим HTML-кодом? Или, возможно, изменить/подкласс/добавить метод категории в NSURLResponse? Мне нравится идея, что это реальный запрос, но я беспокоюсь о частных API и отказывается от App Store.
Идея 2: обращение к настраиваемому URL-протоколу Зарегистрируйте настраиваемый протокол URL, чтобы приложение отвечало на него, и я могу вернуть ему законный запрос NSURLResponse (заполненный моим пользовательским HTML.)
Идея 3: Окуните кеш Создайте запрос с помощью этой политики кэша NSURLRequestReturnCacheDataDontLoad
, а затем каким-то образом получите мой HTML-код между веб-браузером и кешем?
Или, может быть, я полностью ошибаюсь?