我有一个包含一个UIWebView的单一视图一个简单的iOS应用。 在我的web视图,我显示我的jQuery Mobile的网站。
由于通过AJAX jQuery Mobile的加载页面时, webViewDidStartLoad
和webViewDidFinishLoad
方法不调用一次初始页面加载。 我发现作为SO这样类似的问题这一个 ,但我不知道在哪里使用window.location = "localFunction"
号召,也没有人尚未确认这一实际工作。
这是我的问题(举例):
- 应用程序启动
-
shouldStartLoadWithRequest
被称为 -
webViewDidStartLoad
被调用,和网络活动指示符被示出。 -
webViewDidFinishLoad
被调用时,网络活动的指标是隐藏的,并且web视图显示初始网页。 - 用户点击来自主页的链接
-
shouldStartLoadWithRequest
被称为 - 将显示第二页,但
webViewDidStartLoad
和webViewDidFinishLoad
没有为会议期间再次调用。
有没有办法强制jQuery Mobile的或iOS应用调用webViewDidStartLoad
和webViewDidFinishLoad
,这样我可以做一个简单的任务,如显示网络活动指示灯,当webViewDidStartLoad
被调用,并且隐藏在webViewDidFinishLoad
叫?
如果你想发信号UIWebView
的页面变化; 您可以使用自定义的方案启动选项,在SO后您的问题进行讨论。
定义window.location
的变化pagebeforechange
处理程序:( JQM页面改变事件 )
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);
});
截获此定制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;
}
}
webViewDidStartLoad
和webViewDidFinishLoad
只调用时window.location
变化。 UIWebView
无法拦截Ajax调用。
您可以关闭JQM的Ajax导航-全球范围内通过设置ajaxEnabled="false"
使用或个别网页/链接data-ajax="false"
。
要么
如果问题简单地示出了活动的指标; 你可以通过调用使用JQM的内置活动指示灯$.mobile.showPageLoadingMsg
。
它与jQuery Mobile的网站页面呈现的方式有问题。 如果禁用该网站AJAX导航他们得到调用。 随着支持AJAX,点击一个链接时,webViewDidStartLoad不会被调用,因为,因为页通过Ajax请求,该窗口的位置不会改变,因此,iOS不注册页面改变或页面加载。
文章来源: jQuery Mobile is NOT triggering webViewDidStartLoad and webViewDidFinishLoad after leaving homepage in webView