这几天在做一个webview,然后涉及到一个webview容器中加载html5页面,然后点击html5页面中的链接,跳转到下一个html5页面去,这两个html5页面的数据加载是用token关联的。
第一个html5页面,在第一次加载的时候token是ok的,然后页面数据也都是正常的。
第二个html5页面在加载的时候老是找不到token,最后发觉应该是webview的一个bug。
解决办法:用这个第三方开源库UIWebView-TS_JavaScriptContext
就是在一个网页内部点击链接跳转到另一个网页的时候,第二个页面需要交互,这时JSContext环境
已经变化,但是- (void)viewDidLoad
仅仅加载一次,跳转的时候,没有再次注入交互对象,这样就会导致第二个页面没法进行交互。
解决办法:
其实网上已有很好的解决办法,就是在每次创建JSContext环境
的时候,我们都去注入此交互对象这样就解决了上面的问题。具体解决办法参考了此开源库UIWebView-TS_JavaScriptContext。关于这个开源库,我说一点在- (void)webView:(id)unused didCreateJavaScriptContext:(JSContext*)ctx forFrame:(id<TSWebFrame>)frame
此方法中使用到代理方法parentFrame
可能会被认为是私有API
而遭拒,在Issues
中有人提到。
此处可以修改parentFrame 为其他的名字就可以了。