在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
答案 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
}