Cleaver页面重新加载触发“设备在5秒后仍未触发”

时间:2014-03-08 13:44:52

标签: ios cordova uiwebview

在iOS应用程序中,我使用Phonegap / Cordova Cleaver来托管Web视图。由于各种原因,我不想使用InAppBrowser或外部浏览器,因此我添加了自己的导航按钮和UIWebViewDelegate。

在第一次加载任何页面时,事情很有效,但是通过后退导航按钮或window.location.reload返回页面,将不会触发deviceready事件。

此处已多次询问此错误,但似乎有很多方法可以触发它。我试过upgrading Cordova(从2.8.0到3.3.0)。我确定了我的config.xml文件plugins match我正在编译的内容。我已经将html和javascript删除为Cordova文档示例。

我的视图控制器代码看起来有点像这样:

@interface MyViewController () <UIWebViewDelegate>

@end

@implementation MyViewController 

UIButton *backButton;

- (void)viewDidLoad
{
     [super viewDidLoad];

     self.webView.delegate = self;

     // … style and place the button, frame, etc.
}

- (void)backButtonPressed
{
     NSLog(@"backButtonPressed");
     if (self.webView.canGoBack) [self.webView goBack];

     // this loads the page but the deviceready event will not subsequently fire!!
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
     NSLog(@"webViewDidStartLoad");

     // do some stuff
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
     NSURLRequest *currentRequest = [webView request];
     NSLog(@"Current URL is %@", [currentRequest URL]);

     // do some stuff
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
     NSLog(@"webView:didFailLoadWithError");
     // do some stuff
}

@end 

1 个答案:

答案 0 :(得分:0)

从这里阅读其他相关答案,我怀疑我的情况有点独特,但是我花了很多时间在这个上面撞击键盘,跟着许多红鲱鱼,所以我想发表我的经历。

问题是Cleaver Web视图继承自CDVViewController。 Cordova在页面拦截方面做了自己的工作,我忘了在webViewDidStartLoad,webViewDidFinishLoad和webView:didFailLoadWithError中调用super。

- (void)webViewDidStartLoad:(UIWebView *)webView
{
     [super webViewDidStartLoad:webView];

     NSLog(@"webViewDidStartLoad");

     // now the back button and page reload will work, and deviceready will fire
}