Нулевой источник не разрешен Access-Control-Allow-Origin - PullRequest
172 голосов
/ 10 декабря 2011

Я сделал небольшой xslt-файл для создания html-вывода с именем weather.xsl с кодом следующим образом:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

Я хочу загрузить html-вывод в div в html-файле, который япытаюсь сделать с помощью jQuery следующим образом:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

Но я получаю следующую ошибку: Нулевой источник не разрешен Access-Control-Allow-Origin.

У меня естьчитайте о добавлении заголовка в xslt, но я не уверен, как это сделать, поэтому любая помощь будет принята, и если загрузка в выходной html не может быть выполнена таким образом, то совет, как еще это сделатьбыло бы здорово.

Ответы [ 5 ]

215 голосов
/ 10 декабря 2011

Origin null - это локальная файловая система, поэтому предполагается, что вы загружаете HTML-страницу, которая выполняет вызов load, по URL-адресу file:/// (например, просто дважды щелкните ее в локальном файловом браузереили похожие).Различные браузеры используют разные подходы к применению Одинаковой политики происхождения к локальным файлам.

Я предполагаю, что вы видите это с помощью Chrome.Правила Chrome для применения SOP к локальным файлам очень жесткие, он запрещает даже загрузку файлов из того же каталога, что и документ.Так же как и Опера.Некоторые другие браузеры, такие как Firefox, разрешают ограниченный доступ к локальным файлам.Но в основном, использование ajax с локальными ресурсами не будет работать кросс-браузер.

Если вы просто тестируете локально что-то, что вы действительно будете развертывать в Интернете, а не использовать локальные файлы, установитепростой веб-сервер и тестируйте через http:// URL.Это дает вам гораздо более точную картину безопасности.

212 голосов
/ 07 ноября 2012

В Chrome и Safari есть ограничение на использование ajax с локальными ресурсами. Вот почему выдает ошибку типа

Нулевой источник не разрешен Access-Control-Allow-Origin.

Решение: Используйте Firefox или загрузите свои данные на временный сервер. Если вы все еще хотите использовать Chrome, запустите его с опцией ниже:

--allow-file-access-from-files

Подробнее о том, как добавить вышеуказанный параметр в Chrome: Щелкните правой кнопкой мыши значок Chrome на панели задач, щелкните правой кнопкой мыши Google Chrome во всплывающем окне, выберите «Свойства» и добавьте вышеуказанный параметр. в текстовом поле «Цель» на вкладке «Ярлык». Это будет выглядеть так:

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Надеюсь, это поможет!

40 голосов
/ 07 марта 2014

Просто хотел добавить, что ответ «запустить веб-сервер» кажется довольно пугающим, но если у вас есть python в вашей системе (установлен по умолчанию, по крайней мере, в MacOS и любом дистрибутиве Linux), это так просто, как:

python -m http.server  # with python3

или

python -m SimpleHTTPServer  # with python2

Итак, если у вас есть html-файл myfile.html в папке, скажем mydir, все, что вам нужно сделать, это:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

Затем укажите в браузере:

http://localhost:8000/myfile.html

И все готово! Работает на во всех браузерах , без отключения веб-безопасности, разрешения локальных файлов или даже перезапуска браузера с параметрами командной строки.

2 голосов
/ 20 ноября 2013

Добавим немного, чтобы использовать решение Гохана для использования:

--allow-file-access-from-files

Теперь вам просто нужно добавить текст выше в текст цели, а затем пробел.убедитесь, что вы закрыли все экземпляры браузера Chrome после добавления указанного выше свойства.Теперь перезапустите Chrome по значку, где вы добавили это свойство.Это должно работать для всех.

2 голосов
/ 20 августа 2013

Я хотел бы смиренно добавить, что согласно этому источнику SO: https://stackoverflow.com/a/14671362/1743693, этот тип проблемы теперь частично решается просто с помощью следующей инструкции jQuery:

<script> 
    $.support.cors = true;
</script>

Я попробовал его на IE10.0.9200, и он сразу заработал (с использованием jquery-1.9.0.js).

На chrome 28.0.1500.95 - эта инструкция не работает(это происходит повсюду, так как Дэвид жалуется в комментариях по ссылке выше)

Запуск chrome с --allow-file-access-from-files у меня не работал (как у Maistoraпретензии выше)

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