我有一个简单的iOS应用程序,其中包含一个包含UIWebView的单个视图。在我的webView中,我显示了我的jQuery Mobile网站。
由于jQuery Mobile通过ajax加载页面,因此在初始页面加载后不会调用webViewDidStartLoad
和webViewDidFinishLoad
方法。我在SO上发现了类似的问题,例如 this one ,但我不确定在哪里使用window.location = "localFunction"
来电,还没有人确认这实际上有效
这是我的问题(例子):
shouldStartLoadWithRequest
被称为webViewDidStartLoad
,并显示网络活动指示符。webViewDidFinishLoad
被调用,网络活动指示器被隐藏,webView显示初始网页。shouldStartLoadWithRequest
被称为webViewDidStartLoad
和
webViewDidFinishLoad
的持续时间不再被调用
会话。有没有办法强制jQuery Mobile或iOS应用程序调用{{1}}和webViewDidStartLoad
,以便我可以执行一项简单的任务,例如在webViewDidFinishLoad
时显示网络活动指示符被调用,并在调用webViewDidStartLoad
时隐藏它?
答案 0 :(得分:1)
如果您想发出UIWebView
页面更改的信号;您可以使用自定义方案启动选项,如问题中的SO帖子所述。
在window.location
处理程序中定义pagebeforechange
更改:(JQM Page change events)
logToIosConsole: function(msg){
console.log("logToIosConsole: log://"+msg);
var standalone = window.navigator.standalone,
userAgent = window.navigator.userAgent.toLowerCase(),
safari = /safari/.test( userAgent ),
ios = /iphone|ipod|ipad/.test( userAgent );
if( ios ) {
if ( !standalone && !safari ) {
//uiwebview
window.location = "log://"+msg;
};
} else {
//not iOS
};
在javascript中使用
$(document).on("pagebeforechange", function(eve, ui){
logToIosConsole("pagebeforechange called on "+eve.currentTarget.URL);
});
在shouldStartLoadWithRequest
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *theAnchor=[[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
if([theAnchor hasPrefix:@"log:\/\/"]) {
NSString *logText=[theAnchor substringFromIndex:@"log:\/\/".length];
NSLog(@"LogMsg==>%@",logText);
return NO;
}
}
答案 1 :(得分:0)
webViewDidStartLoad
和webViewDidFinishLoad
仅在window.location
更改时调用。 UIWebView
无法拦截Ajax调用。
您可以通过使用ajaxEnabled="false"
设置data-ajax="false"
或单个网页/链接来全局关闭JQM的Ajax导航。
OR
如果问题只是显示活动指标;您可以通过调用$.mobile.showPageLoadingMsg
来使用JQM的内置活动指示器。
答案 2 :(得分:0)
jQuery Mobile网站呈现页面的方式存在问题。如果您禁用网站的ajax导航,他们会被调用。使用Ajax ENABLED时,单击链接时永远不会调用webViewDidStartLoad,因为通过Ajax请求页面,窗口位置不会更改,因此iOS不会注册页面更改或页面加载。