【发布时间】:2011-06-14 06:19:36
【问题描述】:
我无法将自定义 HTML 加载到我的 UIWebView 中而不破坏其 goBack 方法。
什么有效
我正在拦截我的UIWebView 的 URL 请求,以便加载自定义 HTML。我可以控制所有 HTML,因此我的特殊应用程序请求使用自定义方案(即myapp://arg1/?arg2=val),我可以在webView:shouldStartLoadWithRequest:navigationType: 中解析它。我决定我真正想要加载的 HTML 并调用 loadHTMLString:baseURL 并返回 NO 以取消原始请求。
什么不起作用
上面的效果很好。问题是我想使用 UIWebView's goBack 方法,而 loadRequest: 似乎是唯一添加到其历史堆栈中的 UIWebView 方法。
我有一些想法,但我不确定哪些是可行的以及如何去做。主要的似乎是我必须在webView:shouldStartLoadWithRequest:navigationType中返回YES并且我必须使用UIWebView的loadRequest方法。
思路一:修改 NSURLRequest/Response: 我可以继承 NSURLRequest 以便(当 UIWebView 发出请求时)它实际上不会发出 HTTP 请求并返回一个包含我的 HTML 的 NSURLResponse 吗?或者也许修改/子类/添加一个类别方法到 NSURLResponse 不知何故?我喜欢它是一个真实请求的想法,但我担心私有 API 会被 App Store 拒绝。
想法 2:处理自定义 URL 协议 注册一个自定义 URL 协议,以便我的应用程序响应它,我可以让它返回一个合法的 NSURLResponse(填充我的自定义 HTML。)
想法 3:欺骗缓存 使用此缓存策略 NSURLRequestReturnCacheDataDontLoad 创建请求,然后以某种方式将我的 HTML 放在 webView 和缓存之间?
或者也许我完全走错了路?
【问题讨论】:
-
你有没有想出一个好的解决方案?如果是,那是什么?
标签: ios cocoa-touch uiwebview nsurlrequest