Доступ к относительным URL через «ajax» из содержимого «file: //» - PullRequest
5 голосов
/ 07 августа 2010

Я собираю несколько демонстрационных страниц, и одна из вещей, которые я хочу продемонстрировать, заключается в динамическом извлечении фрагментов HTML с последующей обработкой.Таким образом, у меня есть простой код jQuery, такой как:

$('#target').load('./content_fragment.html', function() {
  $(this).doSomething();
});

Я делаю все это из URL-адресов file: //, потому что все это является частью презентации, которую я (возможно) запускаю с большого пальцадиск или что-то.Таким образом, «content_fragment.html» - это просто еще один локальный файл, точно так же как главная страница, содержащая этот код.

Теперь все это прекрасно работает с Firefox или Safari, а других используетОтносительные URL-адреса прекрасно работают в Chrome (iframe "src", изображения, сценарии, CSS и т. д.), но Chrome просто не будет обращать внимания на эти запросы ".load ()".Если я заархивирую содержимое и разверну его на веб-сервере, а затем получу доступ по URL-адресу «http:», то Chrome будет работать нормально.Когда это не работает, я не вижу никаких ошибок в консоли Chrome;он просто не извлекает контент.Я пробовал это с Chrome на Linux и XP, с одинаковыми результатами.(И Safari, или Firefox для одного и того же файла: // URL-адреса всегда выполняют то, что я ожидаю, и загружают контент.)

Поэтому мой вопрос в том, является ли эта странность просто причудой Chrome, или в этом есть что-то по существу сомнительноеXMLHttpRequest и file: // URLs?Другими словами, Chrome делает правильную вещь, что означает, что другие браузеры не работают?

Ответы [ 2 ]

12 голосов
/ 07 августа 2010

Вы можете добавить --allow-file-access-from-files в командную строку при запуске Chrome, чтобы отключить эту функцию безопасности:)

Это ошибка? Может быть, а может и нет, то, что происходит, это то, что file:// не рассматривается как один домен, запросы к другому файлу обрабатываются как другой домен и поэтому блокируются правилами SOP . Это выбор разработчиков Chrome / Chromium, зависит ли это от вашей точки зрения, я полагаю.

В разделе «Проблемы Chrome» в коде Google вы найдете много рассуждений. Вы можете найти интересное обсуждение, здесь и здесь .

1 голос
/ 19 июня 2013

Была такая же проблема в Safari + Firefox:

Предупреждение в приведенном ниже коде не запускается:

$. GetScript ('script.js', function () {alert ("Скрипт загружен и выполнен.");})

Запустится загрузка внешнего файла вместо script.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...