重新加载webview时,EasyJSWebView会中断

时间:2014-03-28 13:33:42

标签: javascript ios webview

我一直在将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用于所有内容,如果重新加载则不用担心。

2 个答案:

答案 0 :(得分:3)

最初的EasyJSWebView存储库中存在一个错误。

只需使用此处的分叉:https://github.com/andiradulescu/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;

}