我一直在将EasyJSWebView实施到一个项目中,该项目会在收到推送消息时弹出一个Web视图。这在大多数情况下都可以正常工作,直到您想要重新加载当前的webview。此时,EasyJSWebView的功能中断,网页中的javascript无法与应用程序中运行的目标C进行通信。
这是我用来将界面添加到webview然后在视图上加载页面的代码。
_webView.delegate = self;
javaScriptInterface* interface = [javaScriptInterface new];
[self.webView addJavascriptInterfaces:interface WithName:@"interface"];
interface.webView = self;
[interface release];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"mywebpage.com"]]];
如果我在网页浏览中调用另一个loadrequest
,即使它是同一页面,也会停止工作。我尝试在重新加载之前向webview添加另一个接口对象,但这似乎也没有做任何事情。
目前,每次我需要重新加载或收到其他推送消息时,我正在销毁当前的webview并创建一个新的webview。
是否有任何修复或解决方法?我希望能够将一个webview用于所有内容,如果重新加载则不用担心。
答案 0 :(得分:3)
最初的EasyJSWebView存储库中存在一个错误。
答案 1 :(得分:0)
我不确定这是否是解决问题的最佳方法,但它适用于我的项目。我的方法是在每次重新加载或重定向请求之前创建一个新的 UIWebView 。以下是详细信息:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
//'isNotFirstLoad' marks if it is the fisrt load.
if (isNotFirstLoad) {
//create an new webview
CGRect frame = _myWebView.frame;
[_myWebView removeFromSuperview];
_myWebView = [[EasyJSWebView alloc] initWithFrame:frame];
[self.view addSubview:_myWebView];
//init the new webview
_webView.delegate = self;
javaScriptInterface* interface = [javaScriptInterface new];
[self.webView addJavascriptInterfaces:interface WithName:@"interface"];
[_myWebView loadRequest:request];
//reset the firstload flag to load the new request
isNotFirstLoad = NO;
return NO;
}
isNotFirstLoad = YES;
return YES;
}