[webView:shouldStartLoadWithRequest:navigationType:]イベントでは、コンテンツを読み込んでいるiframeとコンテンツを読み込んでいるページ全体の違いをどのように確認できますか?どちらも、同じ引数を使って同じイベントを呼び出すようですが、唯一の違いはロードされるURLなので、2つの違いを区別する方法はありません。UIWebViewでiframe読み込みとページ読み込みの違いを確認するにはどうすればよいですか?
私も違いを見分けるためにいくつかの方法を考えてきました:
- は、ページのソースコードを解析し、すべてのiframeのsrc属性のリストを格納し、URLのロードが1である場合と仮定私のリストにあるもののうち、それはiframeです。もちろん、実際にこのページに移動した場合、この仮定は間違っている可能性があります。
- 上記と同じですが、ページ上でJavaScriptを実行し、iframeのsrc属性を取得します。 JavaScriptを使用して
- は、JavaScriptを使用してhttp://niw.at/articles/2009/02/06/how-to-enable-the-popup-window-on-uiwebview/en
- に似たユーザーがページに移動しようとするたびのためのフックを、設定し、右のiframeの前にフックを設定するには、データのロードを(私はこのような何かをするだろうかわからない)しようとします。
- 各iframeのsrc属性を変更して、src属性の末尾に特殊文字列を含むようにします。 "#iframe-loading"この変更されたソースコードでUIWebViewをロードします。これは最初に照会された元のページに存在するiframeに対してのみ有効で、ダイナミックに読み込まれるiframeでは機能しません(例: JavaScriptを介して。
- [webView:shouldStartLoadWithRequest:navigationType:]イベントに
YES
を返してページを正常に読み込ませ、読み込みが完了したらWebViewのURLが変更されたかどうかを確認します。そうでない場合は、ロードされたiframeである可能性があります。 - JavaScriptを使用して、window.locationプロパティ設定ツールをオーバーライドして、実際にウィンドウの位置を変更する前に自分のコードを実行します。次にObjective-Cと通信して、次の負荷が実際にリダイレクトになることを知らせます。これはJavaScriptでリダイレクトする唯一の方法ですか?
これを行うにはどのような方法が最適ですか?私が思っていない方法を考えてもらえますか? iframeには特別なイベント/プロパティがありますかJavaScriptを使用して私を助けることができますか?
おかげ
更新:それはちょうどnavigationTypeをチェックするのと同じくらい簡単ではありません。新しいページを開くためのリンクをクリックするとnavigationType = 0と表示されますが、JavaScriptリダイレクト(window.locationの変更)はnavigationType = 5として表示されます。iframeの読み込みはnavigationType = 5としても表示されます。したがって、navigationType = 5では、ページ全体がJavaScriptを介してURLを変更したのか、それとも同じページにiframeを読み込んでいるのか分かりません。
私はこの方法を使用
navigationType == 5.代わりに、コード内で、その名前で名前を参照する必要があります。 UIWebViewNavigationTypeその他。コンパイラはそれを普通の古い整数に煮詰めますか?はい。しかし、それを正しい方法で実行すると、列挙型の順序を変更したり、将来特定の整数を指定したりすることができます。 –