我在将自定义 HTML 加载到我的UIWebView
不破坏其goBack
method.
什么有效
我正在拦截我的 URL 请求UIWebView
这样我就可以加载自定义 HTML。我可以控制所有 HTML,因此我的特殊应用程序请求使用自定义方案(即myapp://arg1/?arg2=val
)我可以解析webView:shouldStartLoadWithRequest:navigationType:
。我决定我真正想要加载和调用的 HTMLloadHTMLString:baseURL
并返回NO
取消原来的请求。
什么不起作用
上面的效果很好。问题是我想利用UIWebView's
goBack
方法和loadRequest:
似乎是唯一的UIWebView
添加到其历史堆栈的方法。
我有一些想法,但我不确定哪些可行以及如何实施。最主要的似乎是我必须回来YES
in webView:shouldStartLoadWithRequest:navigationType
我必须使用UIWebView
's loadRequest
method.
想法1:修改NSURLRequest/Response:我可以子类化 NSURLRequest 以便(当 UIWebView 发出请求时)它实际上不会发出 HTTP 请求并返回一个包含我的 HTML 的 NSURLResponse 吗?或者也许以某种方式修改/子类/添加一个类别方法到 NSURLResponse ?我喜欢它是一个真正的请求的想法,但我担心私有 API 和被 App Store 拒绝。
想法 2:处理自定义 URL 协议注册一个自定义 URL 协议,以便我的应用程序响应它,并且我可以让它返回一个合法的 NSURLResponse (填充了我的自定义 HTML。)
想法 3:欺骗缓存使用此缓存策略创建请求NSURLRequestReturnCacheDataDontLoad
然后以某种方式让我的 HTML 位于 webView 和缓存之间?
或者也许我完全走错了路?
我刚刚测试了另一种非常聪明的方法:而不是修补NSURLCache
或者重写整个导航历史代码,只需创建一个自定义NSURLProtocol
标准使用的NSURLConnection
每当发出 HTTP 请求时。在那里,您创建自己的NSURLRequest
加载数据并可以检查 MIME 类型、更改请求内容或根据需要将数据缓存到磁盘。这个想法来自 Rob Napier:
http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588 http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588
他的代码现在也在 GitHub 上:
https://github.com/rnapier/RNCachingURLProtocol https://github.com/rnapier/RNCachingURLProtocol
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)