2011-01-15 8 views
3

突然、Firefox(3.6.13)でjQueryの.getJSONを使用したローカルファイルアクセスが動作しません。ローカルファイルを使用しているjQueryの.getJSONがFirefox 3.6.13で動作を停止しました

Chromeでこの機能を使用する際に問題が発生しています。Problems with jQuery getJSON using local files in Chrome--allow-file-access-from-filesオプションを使用して修正します。 私はIE、Chrome(上記と同じ)で動作し、今までFirefoxで動作していたコードを今まで持っていました。

あなたにいくつかのコンテキストを与えること:

// get the only json file 
    var script = _.detect($('script').toArray().reverse(), function(script) { 
     return script.type === 'application/json'; 
    }); 
    // script.src is now '../../json/foo/foo1.json' 
    return $.getJSON(script.src, function(json) { 
     alert('hello');// says 'hello' in IE, Chrome (with arg), used to work in Firefox 
    }); 

は具体的には、小さなコードスニペットが示すように、.getJSONコールが戻り、「こんにちは」と言って失敗した - 問題のJSONファイルがローカルファイルシステムにあります(例:file:///d/foo/bla.json)。 JSONはJSONLintバリデータを渡します。

私はすべてのアドオンを無効にしようとしました - 私はUbuntu &を搭載したVMも持っています(3.6.13)のFirefoxのインストールには同じ問題があります。私の知識の中で最後の作業であったので、私のコードの中の何も変わっていません。私は誰かが本当に何かを忘れて私を叩くつもりであることを知っています。

Firefoxにエラーは表示されません。これがChromeとIEで動作することは、最も明白な間違いを排除します。

これがFirefoxで突然動作を停止する理由についてのヒントやヒントは、非常に高く評価されます。

答えて

4

これはFirefoxの新しいセキュリティ機能によるものだと思います。ローカルのリクエストは、ページのディレクトリまたはページのサブディレクトリにあるファイルに対してのみ行うことができます。

here(強調鉱山)から:

のGecko 1.8で以前、任意の二つのファイル:URIが同じ起源であると考えられます。つまり、ローカルディスク上のHTMLファイルは、ローカルディスク上の他のファイルを読み取ることができます。

Gecko 1.9以降、ファイルは他の特定のファイルのみを読み取ることができます。具体的には、は、元のファイルの親ディレクトリが対象ファイルの祖先ディレクトリである場合にのみ、別のファイルを読み取ることができます。ただし、この方法でディレクトリをロードすることはできません。

たとえば、別のファイルbar.htmlにアクセスするファイルfoo.htmlがある場合、bar.htmlがfoo.htmlと同じディレクトリにあるか、 foo.htmlと同じディレクトリ。 PandaWoodから


脚注: 私はFirefoxのに関する設定を確認することができます。config - あなたがショーを提供リンクとして、falseに> security.fileuri.strict_origin_policyは、すぐに修正


です
+0

これをテストするには、jsonファイルをHTMLと同じディレクトリに配置します(コードサンプルの通知は../../json/bla.jsonです)。次に、javascriptで変更をすべてハードコードして設定しましたそれは今働いています。あなたは正しくなければなりません、ありがとう! – PandaWood

+3

答えを素早く入手できるようにするには:Firefoxの設定に関する確認ができます:config - > security.fileuri。strict_origin_policyをfalseに設定すると、あなたが提供するリンクが即座に修正されます。 – PandaWood

関連する問題