我一直在一个项目中实现EasyJSWebView,该项目在收到推送消息时弹出一个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添加另一个接口对象,但似乎也没有任何作用。
目前,我正在销毁当前的网页视图,并在每次需要重新加载或收到另一个推送消息时创建一个新的网页视图。
对此有任何修复或解决方法吗?我希望能够使用一个网页视图的一切,而不是担心,如果它被重新加载或没有。
发布于 2014-11-13 22:41:49
在原始的EasyJSWebView存储库中有一个错误。
发布于 2014-08-22 17:13:13
我不确定这是否是解决问题的最好方法,但它在我的项目中有效。我的方法是在每次重载或重定向请求之前创建一个新的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;}
https://stackoverflow.com/questions/22714373
复制相似问题