15

ここにFacebookのファンページを作りました:

http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044

jquery を使用する特定のページ/画像ギャラリーを呼び出す iframe が組み込まれています。Chrome を除くすべてのブラウザですべて正常に動作します。iframe から Chrome に何も表示されず、空の白い背景だけが表示されます。

loadハンドラーの代わりにイベントを使用しようとしましreadyたが、まだ運がありません。
誰かがクロムで同様の問題を目撃しましたか?

どうぞよろしくお願いいたします。

ヘッダーの大きな画像は、jquery を組み込んだページである iframe から取得されます。

アップデート:

以下のコメントに示されているように、Safariでも機能しないようです。

更新 2

iframe の外で実行すると、同じコードが chrome で動作するように見えます。作業ページへのリンクは次のとおりです。

http://jsbin.com/esame4/4

更新 3:

ここに見られるように、iframe を使用している場合、この問題は chrome で持続するようです:

http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=ja
http://forums.sharethis.com/topic.php?id=2742

4

6 に答える 6

5

解決策は実際には簡単です。Facebook ページ/アプリが表示されたときに iframe を Chrome で適切に表示するには、セキュリティで保護されたサーバーからコンテンツまたはプロパティを呼び出す必要があります。

CSS、JS、画像ファイルなど、必要なすべてのファイルとフォルダーが安全なフォルダー内にあることを確認する必要があります。

  1. このためには、ドメインの SSL 証明書が必要です。

  2. 特に変数を使用してファイルを呼び出す場合は、htaccess ファイルと mod 書き換え条件を変更して、すべてまたは特定のフォルダーに対して SSL を強制します。絶対 URL を使用している場合は、それらを https に変更します。

お役に立てれば!

于 2012-11-13T15:29:52.477 に答える
2

その時点でページが既に読み込まれているために document.ready が iframe で呼び出されないという問題がある場合は、読み込みたい JavaScript をドキュメントではなく新しいページの下部に配置することは可能ですか。他のすべてがロードされたらロードされるように、準備ができていますか? 一部のページで同様のことを行いました。たとえば、ページの上部に少しの javascript を配置して読み込み中の画像を表示し、下部に別のチャンクを配置して非表示にするなどです...

<html>
    <head><script>function pop(){alert("Page Loaded");}</script></head>
    <body>Lorum ipsum...</body>
    <script>pop();</script>
</html>
于 2010-07-02T20:48:11.603 に答える
2

gallery.php ページでの Javascript の設定に関連するいくつかの提案:

私の最初の直感は、これは Chrome/WebKit がクロスサイト スクリプティングやその他の同様の潜在的なセキュリティ ホールを処理する方法のバグ (または意図した応答) だと言うことです。セキュリティ ホールには、iframe 内からスクリプトを実行することが含まれていることを知っています (この以前の Chrome バグが言及しているように)。

おそらくそれは、jquery.min.js を gallery.php ページと同じドメインでホストするのではなく、ajax.googleapis.com から参照していることに関係しています。jquery.min.js のコピーをサーバーに配置してリンクし、それが役立つかどうかを確認してください。

また、jQuery ライブラリ<link>タグをタグ内に移動してみてください<head>。その方が適切な場所です。

jQuery Innerfade ライブラリを使用して回転バナーを実行することもできます。これにより、スクリプトがクリーンアップされ、セキュリティの穴を悪用しようとしていないことをブラウザに納得させることができます。

Innerfade の使用に切り替えることができない場合は、少なくとも JavaScript 変数を $ で名前を付けないように変更してください (たとえば、"$curbox" 変数を "curbox" に変更してください)。これにより、ブラウザが Javascript に関して抱えている可能性のある混乱がさらに解消される可能性があります。少なくとも、特に jQuery を使用する場合は、良い習慣です。

于 2010-06-28T15:22:05.847 に答える
1

sAc さん、Chrome 5.0.375.86 で試してみましたが、うまくいきました。Safari と chrome は同じ Web エンジン (Webkit) を使用するため、同じ問題を継承する可能性があります。これは JavaScript の問題であり、現在 Chrome は JavaScriptCore (Webkit のデフォルトの JavaScript エンジン) の代わりに Google V8 JavaScript エンジンを使用しているため、この問題は Chrome の最新バージョンで解決されているようです。iframe が構築される前に DOM が既にドキュメントにロードされているため、ready イベントまたは load イベントをディスパッチしない JavaScriptCore で問題が発生する可能性があります。一時的な解決策として、コンテンツが初期化されたかどうかを確認するフラグを設定できます。このフラグをチェックするには、setTimeOut で 5 ~ 10 秒のタイマーを設定します。初期化されていない場合は、setTimeOut コールバックで呼び出します。したがって、Safari が load イベントまたは ready イベントを呼び出さない場合は、setTimeOut を使用して実行できます。もちろん、jquery レイヤー内に配置しないでください。iFrame によって読み込まれるように、HTML 内に純粋な JavaScript タグとして配置します。

于 2010-07-02T19:14:14.970 に答える
0

機能しない理由は、ブラウザーが iframe を安全でないとマークしているためです。これを修正するには、表示したいページの先頭に文字セットを追加するだけです:

< head ><br/>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
< /head><br/>
于 2017-01-05T17:08:02.603 に答える
0

に挿入しようとしているページの応答ヘッダーを確認してくださいiframex-frame-optionsというヘッダーを探しています。

これは、ブラウザにフレーム コンテンツをロードしないように指示する新しいセキュリティ オプションです。多くの Web サーバーでは、デフォルトで追加されます。

それはチェックする価値のあるものです。

于 2010-06-28T15:34:37.557 に答える