16

srcプロパティを使用して、ユーザーが選択したページをiframeにロードしています。ロードに失敗した場合は、ユーザーにとって意味のある観点から問題を報告したいと思います。一般に、iframeはhttp://www.w3schools.com/jsref/dom_obj_frame.aspによるとonerrorをサポートしていません。

ページは私のものではなくユーザーのドメインからのものである可能性があるため、iframeのコンテンツを表示できません。

ロードが成功した場合、タイムアウトを設定してonloadハンドラーからキャンセルできますが、誤ったエラーレポートを回避するために長いタイムアウトが必要になります。その間、iPhoneのSafariは、ユーザーを混乱させる可能性のあるアラートを表示します。これでもKindleFireブラウザーでは機能しません。ロードが成功したかどうかに関係なく、ハンドラーにロードイベントを配信します。

障害を検出するために使用できるイベントはありますか?デフォルトのSafariの動作を抑制する方法はありますか?ロードの試行が失敗したかどうかを知る方法はありますか?(それができれば、より短いタイムアウトを使用して、ロードの試行が解決されるまでポーリングすることができます)。

最新のブラウザの使用を要求することはできますが、できるだけ多くのスマートフォンやタブレット間でポータブルなソリューションが必要です。

AJAX Getのアイデアをテストしましたが、残念ながら機能しません。ターゲットが存在し、iframeにロードできるかどうかに関係なく、任意のURIへのクロスドメインAJAXGetは例外になります。

4

3 に答える 3

10

iframe および/または ajax リクエストを設定して、制御するページ (例: loader.php) を常に呼び出すようにし、get を介してユーザーが要求したページを loader.php に送信します。loader.php から、curl または file_get_contents を使用して外部ページをフェッチします。リクエストが loader.php に戻ってこない場合は、そこでエラーを確認して、iframe に表示させたいものを返すことができます。

私の例では php の使用を参照していますが、curl はさまざまなスクリプト言語でサポートされています。他のソリューションよりも複雑になる可能性がありますが、応答ヘッダーにアクセスして、ページの読み込みが失敗した理由をトラブルシューティングすることもできます。

于 2012-11-07T16:52:58.123 に答える
2

ご指摘のとおり、別のドメインにある場合、iframe 内で何かをクエリしようとすると、same-origin-policy タイプの制限に直面します。

フレームの URL に渡す前に、iframe の URL に対して AJAX GET 要求を行うことができますsrc。AJAX 呼び出しから HTTP 200 応答が返されない場合、サイトはフレーム内にロードすることもできません。

これにより、プロセス全体にオーバーヘッドが追加され、iframe のドキュメントが機能する実際の URL であるかどうかを確認する場合にのみ役立ちます。iframe ドキュメントがいつ完全にロードされたかを知る必要がある場合は役に立ちません。

iframe がいつ読み込まれたかを知る必要があり、それが外部ドメインにある場合は、それらの外部サイトにコードを追加して、親ページが正常に読み込まれたことを親ページに通知するように依頼する以外に選択肢はないと思います。 .

または、そうすることが理にかなっている場合は、エンド ユーザーにリンクをクリックして、コンテンツが正しく読み込まれていないことを知らせるように依頼します。

于 2012-11-05T00:12:01.250 に答える