Что делает document.domain = document.domain?

Компонент JS на стороне клиента Orbited (сервер кометы) требует, чтобы сервер работал в другом домене или порт к самому JS, вы должны выполнить

document.domain = document.domain;

перед загрузкой любого другого JS. (Смотрите документация.)

Что это делает? Это похоже на NOOP! (Я проверил, и это действительно необходимо.)

Ответ 1

Я действительно написал этот код.

При попытке выполнить комбо-субдомен/порт компилятор iframe должен иметь то же значение document.domain, что и родительский фрейм. К сожалению, браузер сохраняет имя домена AND и внутренне для исходного значения document.domain. Но getter и setter в javascript ничего не знают о порте. Таким образом, проблема такова: если верхний кадр document.domain равен ('example.com', 80), а нижний кадр ('comet.example.com', 80), как вы получите нижний фрейм как ('example.com', 80)?

Вы не можете, так как изменение части имени хоста обязательно приведет к тому, что порт будет установлен на null, поэтому лучше всего сделать это ('example.com', null) в нижнем фрейме. Таким образом, верхний кадр также должен быть установлен на это значение, и установка document.domain=document.domain делает именно это. Он изменяет внутреннее представление в браузере от ('example.com', 80) до ('example.com', null), а затем все работает, и связь между портами/субдоменными кадрами работает.

Ответ 2

Браузеры различают (a) document.domain, если явно не установлен а также (b) document.domain, когда явно задано ... даже если они возвращают одинаковое значение.

Явная установка значения указывает на намерение "сотрудничать" с script на другом подобласте (в том же родительском домене).

Если BOTH родительская страница и внешний script явно устанавливают document.domain на одно и то же значение, ограничение политики одного и того же происхождения может быть обойдено, и каждый script может получить доступ ко всем объектам и свойствам, контексты друг друга.

Ответ 3

Я нашел следующую информацию на этом сайте: devguru. Более конкретно, здесь цитата:

Это свойство устанавливает или возвращает доменное имя сервера, из которого документ возник. Это значение по умолчанию к доменному имени сервера, который документ был получен, но может быть изменен на суффикс (и только суффикс) этого имени. Это позволяет совместное использование свойств script, безопасность позволяя, между доставленными документами с разных серверов, обеспечивая их совместно использовать тот же суффикс домена.

Мне кажется, что он позволяет выполнять межсайтовый скриптинг для одного домена (даже если поддомен отличается).

Я бы предположил, что если вы не коснитесь document.domain, js-движок разрешит другим javascripts из того же домена. С помощью этого свойства вы сможете развернуть его в других поддоменах, например, в состоянии орбитальных документов.

Ответ 4

document.domain извлекает значение по умолчанию из фактического URL, если оно явно не задано. Браузеры будут записывать, если document.domain пришел по умолчанию из URL-адреса или если он был явно установлен. Оба должны быть по умолчанию для одного и того же домена или оба должны быть явно установлены в один и тот же домен, чтобы это работало. Если один из них по умолчанию, и один явно установлен, оба соответствуют, если они читаются, обе страницы будут по-прежнему запрещать разговаривать друг с другом.

Смотрите: https://developer.mozilla.org/en-US/docs/DOM/document.domain