Javascript EasyJSWebView在重新加载webview时中断

Javascript EasyJSWebView在重新加载webview时中断,javascript,ios,webview,Javascript,Ios,Webview,我一直在实施一个项目,在收到推送消息时弹出一个web视图。这在大多数情况下都可以正常工作,直到您想要重新加载当前的webview为止。此时EasyJSWebView的功能中断,网页中的javascript无法与应用程序中运行的objective C通信 这是我用来将界面添加到webview,然后在视图上加载页面的代码 _webView.delegate = self; javaScriptInterface* interface = [javaScriptInterface new]; [s

我一直在实施一个项目,在收到推送消息时弹出一个web视图。这在大多数情况下都可以正常工作,直到您想要重新加载当前的webview为止。此时EasyJSWebView的功能中断,网页中的javascript无法与应用程序中运行的objective 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"]]];
如果我在webview上调用另一个
loadrequest
,即使它是在同一个页面上,也会停止工作。我尝试在重新加载之前向webview添加另一个接口对象,但这似乎也没有任何作用

目前,我正在销毁当前的webview,并在每次需要重新加载或收到其他推送消息时创建一个新的webview


是否有任何修复或解决方法?我希望能够使用一个webview处理所有问题,并且不担心它是否会被重新加载。

我不确定这是否是解决问题的最佳方法,但它在我的项目中起作用。我的方法是在每次重新加载或重定向请求之前创建一个新的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;

}

原始EasyJSWebView存储库中有一个bug


只需从这里使用fork:

对我来说,同样的问题你为@mbeckham没有@Ios开发者找到了任何解决方案。我们在javascript中使用主干路由,因此我认为对我们来说是一个问题(必须重新加载页面以刷新页面)是通过一个简单的路由调用来处理,让javascript刷新页面上的数据。很抱歉,我没有更好的信息。如何更改接口名称?WithName:@“interface”这不起作用。你只是把它分叉了,如果你做了一些修改,它不能解决这里的问题。。。我试图使用它,但每次重新加载UIWebView时,JavaScript都会说找不到变量。@Adromilbala对此表示抱歉。我忘了提到,如果你想在重新加载后立即调用你的函数,你必须把它放在1ms的setTimeout内,因为注入是在页面加载后进行的,因此在注入完成之前变量将不存在。改为试试这个:setTimeout(function(){yourJSInterface.yourFunction()},1);我试图在setTimeout上设置1秒差分(1000ms),但这也不能解决问题。@AdromilBalais从这里尝试修改后的示例