1

UIWebView を含む単一のビューを持つシンプルな iOS アプリがあります。webView 内で、jQuery Mobile Web サイトを表示します。

jQuery Mobile は ajax を介してページをロードするため、最初のページがロードされると メソッドwebViewDidStartLoadwebViewDidFinishLoadメソッドは呼び出されません。SO でthis oneなどの同様の質問を見つけましたが、どこで呼び出しを使用すればよいかわかりませwindow.location = "localFunction"ん。また、これが実際に機能することをまだ誰も確認していません。

これが私の問題です(例):

  1. アプリの起動
  2. shouldStartLoadWithRequestと呼ばれる
  3. webViewDidStartLoadが呼び出され、ネットワーク アクティビティ インジケータが表示されます。
  4. webViewDidFinishLoadが呼び出され、ネットワーク アクティビティ インジケーターが非表示になり、webView に最初の Web ページが表示されます。
  5. ユーザーがホームページからリンクをクリックする
  6. shouldStartLoadWithRequestと呼ばれる
  7. 2 番目のページが表示されますが、セッション中は再度呼び出されることはありませんwebViewDidStartLoadwebViewDidFinishLoad

jQuery Mobile または iOS アプリを強制的に呼び出しwebViewDidStartLoadて、呼び出されたときにネットワーク アクティビティ インジケーターを表示し、呼び出されたときに非webViewDidFinishLoad表示にするなどの簡単なタスクを実行できるようにする方法はありますか?webViewDidStartLoadwebViewDidFinishLoad

4

3 に答える 3

1

UIWebViewページの変更を通知したい場合。質問の SO 投稿で説明されているように、custom-scheme 起動オプションを使用できます。

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);
});

この custom-url-scheme をあなたの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; 
    }
}
于 2012-07-24T14:48:40.387 に答える
0

これは、jQuery Mobile サイトがページをレンダリングする方法に問題があります。サイトの ajax ナビゲーションを無効にすると、それらは呼び出されます。Ajax を有効にすると、リンクをクリックしたときに webViewDidStartLoad が呼び出されることはありません。これは、ページが Ajax を介して要求されるため、ウィンドウの場所が変更されず、iOS がページの変更またはページの読み込みを登録しないためです。

于 2012-07-25T02:20:25.440 に答える
0

webViewDidStartLoad変更されたときにwebViewDidFinishLoadのみ呼び出されwindow.locationます。UIWebViewAjax 呼び出しをインターセプトできません。

JQM の Ajax ナビゲーションをオフにすることができajaxEnabled="false"ますdata-ajax="false"

また

問題が単にアクティビティ インジケータを表示している場合。を呼び出すことで、JQM の組み込みのアクティビティ インジケーターを使用できます$.mobile.showPageLoadingMsg

于 2012-07-24T13:50:59.187 に答える