jQuery Mobile的web视图中离开网页后未触发webViewDidStartLoad和we

2019-07-30 13:48发布

我有一个包含一个UIWebView的单一视图一个简单的iOS应用。 在我的web视图,我显示我的jQuery Mobile的网站。

由于通过AJAX jQuery Mobile的加载页面时, webViewDidStartLoadwebViewDidFinishLoad方法不调用一次初始页面加载。 我发现作为SO这样类似的问题这一个 ,但我不知道在哪里使用window.location = "localFunction"号召,也没有人尚未确认这一实际工作。

这是我的问题(举例):

  1. 应用程序启动
  2. shouldStartLoadWithRequest被称为
  3. webViewDidStartLoad被调用,和网络活动指示符被示出。
  4. webViewDidFinishLoad被调用时,网络活动的指标是隐藏的,并且web视图显示初始网页。
  5. 用户点击来自主页的链接
  6. shouldStartLoadWithRequest被称为
  7. 将显示第二页,但webViewDidStartLoadwebViewDidFinishLoad没有为会议期间再次调用。

有没有办法强制jQuery Mobile的或iOS应用调用webViewDidStartLoadwebViewDidFinishLoad ,这样我可以做一个简单的任务,如显示网络活动指示灯,当webViewDidStartLoad被调用,并且隐藏在webViewDidFinishLoad叫?

Answer 1:

如果你想发信号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; 
    }
}


Answer 2:

webViewDidStartLoadwebViewDidFinishLoad只调用时window.location变化。 UIWebView无法拦截Ajax调用。

您可以关闭JQM的Ajax导航-全球范围内通过设置ajaxEnabled="false"使用或个别网页/链接data-ajax="false"

要么

如果问题简单地示出了活动的指标; 你可以通过调用使用JQM的内置活动指示灯$.mobile.showPageLoadingMsg



Answer 3:

它与jQuery Mobile的网站页面呈现的方式有问题。 如果禁用该网站AJAX导航他们得到调用。 随着支持AJAX,点击一个链接时,webViewDidStartLoad不会被调用,因为,因为页通过Ajax请求,该窗口的位置不会改变,因此,iOS不注册页面改变或页面加载。



文章来源: jQuery Mobile is NOT triggering webViewDidStartLoad and webViewDidFinishLoad after leaving homepage in webView