6

この問題を整理するのに約 5 時間を費やしたので、それをどのように克服したかを共有すると、誰かの役に立ち、時間を節約できると思いました (これはかなり最近の修正のようです - この質問を投稿した時点で 9 時間前 - これは私はここで見つけました)。

jQuery バージョン 1.10.1 を使用しています。

概要

Facebookタブアプリケーションを構築しています。これは、訪問者がいくつかの情報を入力し、最近の休日に撮った写真をアップロードするコンテスト エントリー フォームです。Facebook に埋め込む前に、フォームをすべてのブラウザで動作させています。

  • フォームは を使用して送信され$.post()ます。このプロセスで jQuery が指す PHP スクリプトは、フォーム自体と同じドメインにあります。
  • フォームを送信する前に、ファイルをアップロードする必要があります。ファイルのアップロード プロセスは次のように構築されます。
    • <div>ボタンとして機能する があります。この div 内には、<input type="file" />不透明度が 0 に設定されたフィールドがあります。
    • 非表示のファイル入力をクリックすると、ユーザーはファイルを選択します。
    • ファイルが選択されると、.change()イベントがトリガーされ、 <div>「もう一度クリックしてアップロードしてください」というテキストが表示されます。.change()調査中に、Internet Explorer は、ファイル入力に添付されたハンドラー内でフォームを送信することを好まないことがわかったので、ファイルをすぐにアップロードするのではなく、これを行いました。
    • div をもう一度クリックすると、フォームが 経由で送信され.submit()ます。フォームは非表示の iframe をターゲットにしています。ファイルのアップロードが完了し、iframe が.load()イベントをトリガーします。
    • load イベントのハンドラーは.contents().find("div").html()、ファイルのアップロードを管理する PHP スクリプトで送り返した文字列化された JSON を取得するために使用します。JSON には、ファイルのアップロードのステータスと、成功した場合は処理された画像への URL が含まれています。

問題

このアプリケーションは、Facebook に埋め込まれている場合、Internet Explorer を除くすべてのブラウザーで正常に動作します。Internet Explorer では、コンソールに次のように表示されました。

  • SCRIPT5: アクセスが拒否されました。
  • SCRIPT5009: '$' は定義されていません。

最初に 2 番目のエラーを調査したところ、次のような、遭遇すると予想され、既にチェック済みのすべてのものに遭遇しました。

  • スクリプトへのパスが間違っています。
  • ファイルへのアクセスをブロックしている htaccess ファイルが存在する可能性があります。
  • スクリプトが正しく読み込まれていません。キャッシュなどをクリアしてから、もう一度お試しください。
  • ロードされる前に jQuery を必要とするスクリプトを使用しようとしていた可能性。

これらすべてを再確認しましたが、そうではないことを確認しました。次に、「アクセスが拒否されました」というエラーに移りました。私が遭遇しているすべての資料は、AJAX を使用したクロスドメイン リクエストに関する問題を指摘しています。ファイルのアップロードについて具体的に言及している記事もいくつかありますが、この場合、私に 100% 関連する記事はありません。

質問

Facebook に埋め込まれたページで jQuery を使用しようとすると、Internet Explorer でこれらのエラーが発生するのはなぜですか? ページ上の他のすべてのスクリプト(jQueryを除く)を削除してもそれらを取得したため、画像のアップロードを処理するためにページにある非表示のiframeの存在によってトリガーされると思います.

4

2 に答える 2

14

最初に、ページ上の他のすべてのスクリプトを削除しましたが、その時点で次のエラーのみが表示されました (明らかに、これ以上使用しようとしていないためです$)。

  • SCRIPT5: アクセスが拒否されました。

インターネットで見つけたさまざまなこと (およびそれらの組み合わせ) を試した後、問題の原因となっている行をより正確に特定できるように、縮小されていないバージョンの jQuery を使用することにしました。それをアップロードしてコンソールをもう一度見てみると、次のような 1513 行が表示されました。

if ( parent && parent.frameElement ) {

この行の上に、私が経験していた問題を書き留めたコメントがありました。

// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936

私はグーグルjQuery #13936このページに出くわし、上記の行を次のように交換することを提案しました:

if ( parent && parent.attachEvent && parent !== parent.top ) {

この変更を行った後、問題が解決され、フォームが期待どおりに機能していることがわかり、うれしく思いました。他のブラウザーを再度確認したところ、期待どおりに動作することを確認できました。

于 2013-06-13T13:04:51.473 に答える
1

解決済み

これは正当なjQuery 1.10.1バグです: http://bugs.jquery.com/ticket/13980
を使用jQuery 1.10.0するか1.10.2、エラーが発生しなくなりました。

于 2013-09-09T16:34:44.850 に答える