2015-09-03 2 views
4

Я получаю следующую ошибку в Chrome при загрузке тривиально простого html-файла с помощью ссылки jQuery Mobile. Ошибка отсутствует только с помощью ссылки jQuery.Chrome SecurityError загрузка jQuery Мобильная страница из локальной файловой системы

Uncaught SecurityError: Failed to execute 'replaceState' on 'History': A history state object with URL ' http://stacksnippets.net/js ' cannot be created in a document with origin 'null'.

<html> 
 
<head> 
 
<script src="https://code.jquery.com/jquery-2.1.4.js"></script> 
 
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script> 
 
</head> 
 
<body></body> 
 
</html>

Вы можете также "Run фрагмент кода" и увидеть ошибку в консоли.

Эта ошибка не была до сегодняшнего дня. Я не изменил свой код или способ загрузки html-файла в браузер. Он работал отлично - я использую тот же код для всех своих приложений PhoneGap.

Кто-нибудь знает, было ли обновление безопасности для Chrome, которое вызывает этот SecurityError, или я что-то упустил? Как вы собираетесь отлаживать это? Спасибо.

UPDATE

Это обсуждение я думаю, что указывает на то, что происходит, что я подозревал, так как ошибка не появляется при работе с веб-сервером: Origin null is not allowed by Access-Control-Allow-Origin.

Но я все еще удивляюсь, почему это изменилось за последний день, изменилось ли в Chrome изменение в политике безопасности или почему оно работает раньше, и будет ли затронуто какое-либо из моих приложений PhoneGap.

+0

Возможный дубликат [Не удалось выполнить «replaceState» в «История» не может быть создан в документе с именем «null»] (http://stackoverflow.com/questions/32481260/failed-to-execute-replacestate -on-history-local-url-not-be-created-in-a) – GingerPlusPlus

ответ

2

Временное решение: Я прокомментировал все звонки в jQuery mobile, не нужно было управлять журналом браузера в моем приложении.

Интересно, является ли это ошибкой или моделью безопасности в хроме или моделью и будущим поведением.

+0

Да, у меня была такая же мысль, но я с осторожностью отношусь к изменению этого кода, особенно если мне нужно позже обновить jQuery Mobile. Думаю, я могу либо отправить запрос функции в свою группу, либо сделать с взломанной версией. На данный момент я использую веб-сервер для dev. – raduation

+1

@ t2n: Не изменяйте ядро ​​jqm. Обратитесь к моему ответу. Просто добавьте скрипт перед импортом jqm, и он работает! –

+0

Было бы хорошо, если JQM проверит это перед запуском. – ESL

4

Эта ошибка совпадает с исходной ошибкой. Эта ошибка возникает из-за функции безопасности Chrome. Простым решением для тестирования приложения является обход этой безопасности на хроме.

Шаги:

  1. создать хром браузер ярлык на рабочем столе.
  2. Закройте все экземпляры хрома на вашей машине.
  3. Щелкните правой кнопкой мыши на ярлыке на рабочем столе хром и выберите Свойства.
  4. в поле «Цель», добавьте «-allow-file-access-from-files» в конце.
  5. Сохранить и закрыть недвижимость.
  6. Открытый хром через этот ярлык.

Скорее, ошибка ушла. Приложение работает отлично.

ПРИМЕЧАНИЕ: Это просто обход, который я использую для тестирования моих приложений cordova на настольном браузере для тестирования пользовательского интерфейса.

+0

Да, я видел этот флаг, упомянутый в других обсуждениях этой проблемы, но на самом деле он не отвечает на мой вопрос о том, почему Chrome начал генерировать ошибку в один прекрасный день, тогда как раньше работал. Что такое «настольный браузер»? – raduation

+0

@raduation Browser для настольных ОС, которые ОС созданы для запуска (не эксклюзивно) на настольных компьютерах (которые будут работать на ноутбуках и некоторых других совместимых устройствах). В отличие от «телефонных браузеров» или «мобильных браузеров» и т. Д. – ESL

1

На Mac я был в состоянии исправить это, запустив веб-сервер вместо загрузки его из «файл: //» URL:

http://lifehacker.com/start-a-simple-web-server-from-any-directory-on-your-ma-496425450?utm_expid=66866090-49.VYy4WCNHSyuP6EmjnM93MQ.0&utm_referrer=https%3A%2F%2Fwww.google.com%2F

python -m SimpleHTTPServer 8000 

В каталоге должны сделать его доступным от Chrome через 0.0.0.0

+0

Да, он отлично работает на веб-сервере. Однако вопрос заключается в том, почему он не работает в Chrome, загруженном из локальной файловой системы. – raduation

+0

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

0

У меня, похоже, не такая же проблема, как у стабильной версии Chrome (45) или версии Dev (47).

Однако, я лично видел проблемы с заголовком CORS. Если вы можете привести к тому, что проблема будет выполнена надежно, я предлагаю подать ошибку в crbug.com, и разработчик Chrome посмотрит на нее.

+0

Спасибо за предложение! – raduation

Смежные вопросы