#javascript #same-origin-policy
#javascript #политика того же происхождения
Вопрос:
Permission denied for <http://www.guy.lt> (document.domain=<http://www.guy.lt>) to get property Window.document from <http://www.guy.lt> (document.domain has not been set).
Если это не ошибка, то как объяснить такое поведение? (или, по крайней мере, сообщение об ошибке) И, конечно, как это исправить?
Другая странная вещь заключается в том, что в:
debug.log('0');
document.domain = 'guy.lt';
debug.log('1');
document.domain = 'wwww.guy.lt';
debug.log('2');
debug.log('2')
никогда не запускается. Однако в console
нет ошибки. Скрипт просто перестает выполняться.
Комментарии:
1. @minitech: редактирование вопроса и последующий ответ на него не дают ответа на исходный вопрос. Сообщение об ошибке выглядит так, как отображается.
2. каков фактический домен страницы, на которой выполняется этот скрипт?
3. Я бы не был настолько нахальным, чтобы предполагать, что только потому, что вы не понимаете модель безопасности одного домена, это автоматически означает, что это ошибка. Вам действительно нужно указать ПОЛНЫЕ доменные имена обоих сайтов. Не только то, на что вы устанавливаете document.domain.
Ответ №1:
Я не могу сделать вывод, что вы делаете неправильно, основываясь на вашем вопросе, но чтобы включить междоменный скрипт, вы должны установить document.domain
для одной и той же общей части домена. Также актуально:
-
Если одна сторона использует
foo.guy.lt
, а другая сторона используетbar.guy.lt
, то вам придется устанавливатьdocument.domain = "guy.ly"
с обеих сторон. -
Если вы установите
document.domain
значениеguy.lt
, то фактическим доменом должен бытьguy.lt
он сам или поддоменguy.lt
. Вы не можете создавать (дополнительные) доменные имена. -
Вы всегда должны явно указывать значение
document.domain
, даже если значением является сам фактический домен. -
Вы никогда не сможете вернуться
document.domain
к более конкретному поддомену. Итак, если фактический домен являетсяwww.guy.lt
, то вы можете изменить егоdocument.domain
наguy.lt
. Однако после этого изменения вы не сможете изменить его обратно наwww.guy.lt
.
Примеры:
// Actual domain is "www.foo.com"
document.domain = "foo.com"; // this is valid
// Actual domain is "bar.foo.com"
document.domain = "www.foo.com"; // this is invalid, "bar.foo.com" is not a subdomain of "www.foo.com"
// Actual domain is "blah.bar.foo.com"
document.domain = "bar.foo.com" // Ok
document.domain = "foo.com" // Still ok
document.domain = "bar.foo.com" // Invalid, you can't change it back to a more specific domain.
Комментарии:
1.Да, но в моем случае обе стороны используют
document.domain
www.guy.lt
. Следовательно, этот комментарий не имеет значения.2. То, что сказал Элиан, полностью соответствует действительности.
3. Честно говоря, я обновил свой ответ на основе ответа парней и обновленного вопроса 🙂
4. Это все еще не отвечает на мой вопрос, поскольку ошибка связана с попыткой подключиться с www.foo.com для www.foo.com где document.domain для обоих имеет одинаковое значение www.foo.com . Это может быть ошибка FF или что-то в этом роде, потому что я не получал такую же ошибку в Chrome. В любом случае, установка document.domain в foo.com на обоих концах исправлена проблема.
Ответ №2:
Междоменный доступ через document.domain
разрешен только в том случае, если для обеих страниц явно установлено document.domain
одинаковое значение. Это необходимая мера безопасности; в противном случае something.company.com
можно было бы установить document.domain
на company.com
и читать что-либо из company.com
. Как бы то ни было, это может быть сделано, только если company.com
явно выбрано значение document.domain
для company.com
.