0

いくつかのメニューとプレゼンテーション(pdf、flashなど)をロードする必要があるアプリを開発しています。 メニュー項目はデータベースからロードされ、それぞれにIDとテキストが含まれています。メニュー項目は次のようになります。

クロシンコンビフレーム

上記のメニュー項目はハイパーリンクになっており、クリックすると同じページのプレゼンテーションが開きます。

このシナリオでは、(アプリのドキュメント フォルダーにある) データベースにクエリを実行し、プレゼンテーション名とその他の詳細を返すことができる xcode メソッドを呼び出す必要があります。

ここで2つの問題があります

1) 私は出会った

**– webView:shouldStartLoadWithRequest:navigationType:**

しかし、このメソッドはBOOLを返し、他の情報とともにプレゼンテーションを返したい

2)同じページのjavascriptを介してプレゼンテーション(アプリのリソースフォルダー内)をロードする方法がわかりません。

どんな提案でも大歓迎です。前もって感謝します。

4

2 に答える 2

1

で必要なことはほとんどできますwebView:shouldStartLoadWithRequest:navigationType

  1. そこから戻った場合NO、Web ビューは現在の要求をロードしません。これにより、アプリは必要なことを何もしなくなります。

  2. 次に、同じ Web ビューに別の要求をロードすることができます (たとえば、プレゼンテーション リソースを埋め込む HTML 文字列)。

  3. または、自分のコントローラーにメッセージを送信して、別のワークフローを完全に実行することもできます (別の種類のビューなどを表示します)。

編集:

さらにオプション 2 を作成します。

  1. UIWebView を埋め込み、そのデリゲートとしても機能するビュー コントローラーがあるとします。

  2. 次のように、HTML 文字列を取得して Web ビューにロードするビュー コントローラーでメソッドを定義できます。

    - (void)loadContentInWebView:(NSString*)content {
         [_webView loadHTMLString:content  baseURL:nil];
    }
    
  3. ではwebView:shouldStartLoadWithRequest:navigationType、次のようなことができます。

    - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
            if ([[[request URL] absoluteString] isEqual:WHATEVER]) {
                 [self loadContentInWebView:HERE_THE_HTML];
                 return NO;
        }
        return YES;
    }
    

ここで定義する必要があるのは次のとおりです。

 ([[[request URL] absoluteString] isEqual:WHATEVER])

つまり、ユーザーがプレゼンテーションをロードするリンクにいつ触れたかを理解するためのロジックです。

と:

  [self loadContentInWebView:HERE_THE_HTML];

つまり、プレゼンテーションを表示するために使用する HTML コンテンツを何らかの方法で定義します。

于 2012-05-10T07:54:15.720 に答える
0

私は回避策を得ました..それは良い習慣ではありません:

モデル内: このメソッドは、ページが webview にロードされた場合でも、この webview に対する要求が来るたびに呼び出されます

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    // check the request, if it's ajax callback, just return NO; other wise YES;


//    NSURLRequest *request = [self request];
    NSURL *url = [request URL];

    NSString *file = [url lastPathComponent];
    if ([file isEqualToString:@"Presentation.html"] == YES) {
        return YES;
    }

    if ([file isEqualToString:@"ajaxcallback.htm"] == YES) {
        // that means the ajax call is done, so you can call this 
        NSString *result = [web stringByEvaluatingJavaScriptFromString:@"getResponse();"];

        // don't forget to stop loading this fake page
        return NO;
    }
}

そしてJavaScriptで:

   function sendRequestToApp(){
        window.location="http://www.domain.com/ajaxcallback.htm";
    }

    function getResponse(src){
        alert("response");
        document.getElementById("sample").src=src;
    }
于 2012-05-11T04:07:32.413 に答える