.getJSON из jQuery с использованием локальных файлов перестал работать в Firefox 3.6.13 - PullRequest
3 голосов
/ 15 января 2011

Внезапно, локальный доступ к файлам с использованием .getJSON jQuery у меня не работает на Firefox (3.6.13) - только.

Мне известно о проблеме при работе этого в Chrome - Проблемы с jQuery getJSON при использовании локальных файлов в 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, и установка Firefox, установленная на нем (3.6.13), имеет ту же проблему - работала несколько дней назадсейчас нет.Насколько я знаю, в моем коде ничего не изменилось с момента его последней работы.Я просто знаю, что кто-то собирается дать мне пощечину за то, что я забыл что-то действительно глупое.

Firefox не показывает ошибок.То, что это работает на Chrome, и IE исключает наиболее очевидные ошибки.

Будем весьма благодарны за любые советы или подсказки, почему это может внезапно перестать работать в Firefox.

1 Ответ

4 голосов
/ 15 января 2011

Я думаю, это связано с новой функцией безопасности в Firefox: вы можете делать локальные запросы только к файлам, которые находятся в каталоге страницы или в подкаталоге страницы.

С здесь (выделено мной):

В Gecko 1.8 или более ранних версиях любые два файла: URI считаются теми же источниками.Другими словами, любой HTML-файл на вашем локальном диске может читать любой другой файл на вашем локальном диске.

Начиная с Gecko 1.9, файлы могут читать только некоторые другие файлы.В частности, файл может читать другой файл, только если родительский каталог исходного файла является каталогом-предком целевого файла .Однако каталоги не могут быть загружены таким способом.

Например, если у вас есть файл foo.html, который обращается к другому файлу bar.html, загрузка будет выполнена успешно, только если bar.html находится в том же каталоге.как foo.html или в каталоге, содержащемся в том же каталоге, что и foo.html.


Сноска от PandaWood: Я могу подтвердить установку в Firefox about: config ->security.fileuri.strict_origin_policy в false, как показывает указанная вами ссылка, является немедленным исправлением
...