2012-02-08 10 views
1

私はWebKitベースのアプリケーションを持っています。ユーザーが新しいページを開くアクション(リンクのクリックなど)を開始すると、そのURLを傍受してアプリケーションで開くか、Safariに蹴り出したいかを選択します。Cocoa WebViewでユーザーが開始した要求を識別する方法は?

理想的には、最初のリクエストを読み込み順序で、またはユーザーの操作から直接発生したリクエストを特定したいと思います。また、フレーム内のトップレベルURLへの変更を特定できれば十分でしょう。代わりにSafariにバウンスすることにした場合、リクエストを取り消す必要があるという警告があります。

私はwebView:decidePolicyForNavigationAction:request:frame:decisionListenerを実装しました。ページのロード中に行われたすべてのリクエストを見ることができます。ユーザーによってトリガーされたリクエストと、Javascriptによって開始されたリクエスト(REST)は、そのようなことを呼び出します。

単純なリンクでは、アクション情報からWebActionNavigationTypeを取得できます。しかし、ユーザが別のページにナビゲートするJavascriptのonclick()ハンドラを持つ要素をクリックすると、ナビゲーションタイプは「その他」になり、他のすべてのJavascriptリクエスト(つまり元の要求)。

他にもこれに取り組んでいますか?すべてのポインタ?ありがとう!

答えて

0

私は私にとってはうまくいくものを見つけました。このテストでは、decidePolicyForNavigationActionで、ユーザーが開始したアクションかどうかが判断されます。

BOOL isUserAction = (
    [frame isEqual:[sender mainFrame]] && 
    [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]] 
); 
関連する問題