Что такое window.origin? - PullRequest
       9

Что такое window.origin?

1 голос
/ 01 апреля 2019

Что такое window.origin? Кажется, это не задокументировано в обычном месте .

Похоже, это может быть очень похоже на window.location.origin - например, здесь, при переполнении стека, оба возвращают

https://stackoverflow.com

Но внутри iframe они разные:

console.log(window.location.origin);
console.log(window.origin);
https://stacksnippets.net
null

Встроенный фрагмент находится внутри iframe без allow-same-origin. Например, если вы измените iframe, измените HTML-код переполнения стека и добавите атрибут вручную:

<iframe name="313b857b-943a-7ffd-4663-3d9060cf4cb6" sandbox="allow-same-origin allow-forms allow-modals allow-scripts" class="snippet-box-edit" frameborder="0" style="">
                                                             ^^^^^^^^^^^^^^^^^^

и затем запустить фрагмент, вы получите:

https://stacksnippets.net
https://stacksnippets.net

Такое же поведение проявляется на других сайтах с <iframe> с.

Google не имеет каких-либо авторитетных ссылок на эту тему. Поиск точной фразы + Javascript дает много результатов, связанных с iframe s и postMessage, но нет точного описания того, что window.origin на самом деле является .

Вызов postMessage от дочернего iframe приводит к тому, что родительское окно получает сообщение со свойством origin, соответствующим window.origin дочернего фрейма - без allow-same-origin, это null, в противном случае похоже, это то же самое, что и window.location.origin ребенка.

Это то, что я думаю Я понял из догадок и проверок, но я не уверен в этом. Буду признателен за подтверждение / объяснение, желательно со ссылкой на авторитетный источник.

1 Ответ

1 голос
/ 01 апреля 2019

Я думаю, что это не задокументировано, потому что оба одинаковы с небольшой разницей, В большинстве случаев не имеет значения, какой вариант вы выберете. Однако есть несколько случаев, когда один предпочтительнее другого, например:

  1. Политика одного и того же происхождения конфликтует, если задавать новый URL-адрес в iframe или другом окне, источник которого уже отличается от текущего окна (например, если у iframe домен, отличный от документа, в который он загружен, и вы хотите изменить URL-адрес iframe) будет использовать окно. местоположение, чтобы установить новый URL. Это связано с тем, что location.href доступен только для чтения при вызове из другого источника (домена).
  2. при использовании строго в вашем JavaScript может вызвать исключение при использовании окна. location, поскольку вы, по сути, присваиваете строку объекту, поэтому здесь лучше всего использовать полный window.location.href.

См. этот вопрос для справки.

...