0

UIWebViewどのURLをロードするかどうかを制御できるように処理していますが、 NO を返しているにもかかわらず、ページをロードする方法もあります。ドキュメントには、NO を返すとUIWebViewページが読み込まれないことが明確に記載されていますが、

デバッグすると、返されていることがわかりますNOが、それでもUIWebViewURL が読み込まれます。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"%@", [[request URL] absoluteString]);
    NSString *fullURL = [[request URL] absoluteString];

    NSRange range = [fullURL rangeOfString:@"#"];
    if (range.length != 0) {
        NSLog(@"We need to show the other view");

        return NO;
    }


    return YES;
}
4

4 に答える 4

1

私は問題を解決し、ここに文書化したので、他の人に役立つかもしれません. 実際には、この問題を引き起こしている JavaScript を使用して読み込んでいた HTML です。単純なhtmlをいくつか使用してテストするだけでわかりました。HTML に問題があることがわかったら、HTML を修正し、現在は機能しています。

于 2012-07-04T11:49:46.647 に答える
0

まず、viewDidLoadでデリゲートを次のように設定していることを確認します

webView.delegate = self;

(xibファイルとviewDidLoadで2回設定しないように注意してください。以前は、問題が発生していました)

次のように、クラスにUIWebViewDelegateを実装していることを確認してください。

@interface RootViewController : UIViewController<UIwebViewDelegate>

あなたがこれらすべての面倒を見ていて、それでもあなたが問題に直面していると仮定します。また、デバッグして、デリゲートメソッドがNOを返していることを確認しているためです。これが発生している理由の1つは、新しいページをロードするのではなく、AJAXなどを使用していることです。

次のコードを2種類のページでテストしました。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{
    NSLog(@"THE loadCount is %d", self.loadCount);
    if (self.loadCount > 1){
        return NO;
    }
    self.loadCount++;
    return YES;
}

ケース1:すべてのURLが新しいページをロードするWebページ。この場合、上記のコードは機能し、必要に応じて、最初のロード後にページをロードできません。

ケース2:最初の読み込みが完全に新しいWebページであるWebページ。しかし、他のすべてはAJAXでロードされます。その場合、loadCountは増加せず、ページは正常にロードされます。

提供されたデータで私が考えることができるのはそれだけです。:)

于 2012-07-03T19:39:46.027 に答える
0

リターン YES 部分の直前にブレークポイントまたは NSLog を設定します。なんらかの理由でメソッドが 2 回呼び出され、1 つで NO を返し、もう 1 つで YES を返す場合があります。

于 2012-07-03T17:04:29.597 に答える