1

これは本当に私を悩ませています。私はwebViewを持っていて、それを取得しようとしています.drive.google.com. ただし、そのサイトのリダイレクトの量が原因で、webView は何もしません。didFailWithProvisionalLoadWithError メッセージが表示されるので、webView をロードするコードが機能し、その URL が正しいことはわかっています。それがリダイレクトの問題であることを私が知っている方法です。

いろいろ調べましたが、許可されるリダイレクトの量を変更する方法が見つかりません。Safariで処理できるので、それが可能であることはわかっています。オーバーライドする何らかのデリゲート メソッドが必要です。すべての検索 (4 日分) で何も見つからなかったので、今日はコードはありません。

誰かがアイデアを持っているなら、私に知らせてください。参考までに、これはココア (WebView) であり、ココア タッチ (UIWebView) ではありません。ありがとう。

4

2 に答える 2

3

あなたが探し求めてきたものは、

– webView:decidePolicyForNavigationAction:request:frame:decisionListener:

これはWebPolicyDelegateプロトコルの一部です。

のドキュメントWebPolicyDelegate、特にこのデリゲート メソッドの説明を読んでください。のドキュメントでWebPolicyDecisionListenerは、リスナーに送信できるメッセージについて説明しています。このデリゲート メソッド内でリダイレクトを識別し、それを使用するか無視するかを決定リスナーに指示できます。

編集:

50 点はありがたかったですが、あなたの問題解決に役立たなかったとしたら、私はそれに値するとはとても思えません。

ドキュメント ベースではない、または ARC またはガベージ コレクションを使用する小さなアプリを作成しました。MainMenu.xib ファイルで自動レイアウトをオフにし、単純にその中に WebView のインスタンスを配置しました。AppDelegate を変更して、WebView インスタンスのアウトレットを含めました。

-applicationDidFinishLaunching:次に、次のようにスタブを肉付けして作成しました。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSString *urlString = @"http://drive.google.com";
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    [[[self webView] mainFrame] loadRequest:urlRequest];
}

リダイレクトを受け取ったとしても、ページを表示する能力に影響を与えているようには見えません。

私たちは同じページにいますか (しゃれは意図されていません)?

編集2:

良いニュース (または、POV によっては悪いニュース): リダイレクトが問題になることはありませんでした (実際に何が起こっているのかを明らかにするのには役立ちましたが)。

Google ドライブに関して言えば、WebView は承認されたブラウザーではありません。ただし、ユーザー エージェント文字列を変更することで、これを修正することができます (NB、以下)。改訂されたコードは次のとおりです。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSString *urlString = @"http://drive.google.com";
    NSURL *url = [NSURL URLWithString:urlString];

    NSString *customUserAgent = [NSString stringWithFormat:@"%@ Version/6.0.2 Safari/8536.26.17", [[self webView] userAgentForURL:url]];

    [[self webView] setCustomUserAgent:customUserAgent];

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    [[[self webView] mainFrame] loadRequest:urlRequest];
}

注: ユーザー インターフェースは完全に機能しているように見えますが、それでも、Google はブラウザが何であるかを判断する方法を変更し、このスキームを破る可能性があるため、注意してください. Google ドライブにアクセスする代替手段として、SDK を調べてみてください。

いつものように、あなたの努力に幸運を。

于 2012-11-20T23:50:04.010 に答える
0

Apple ドキュメントの WebView 参照クラスによると、webframeloaddelegate プロトコルに準拠するデリゲートを設定する必要があります。

[webView setFrameLoadDelegate:object];

次に、オブジェクトで、このメソッドを設定する必要があります:

- (void)webView:(WebView *)sender willPerformClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date forFrame:(WebFrame *)frame 
于 2012-11-28T05:36:44.013 に答える