什么是 window.origin?

What is window.origin?

什么是window.originthe usual place.

中似乎没有记录

它看起来可能与 window.location.origin 非常相似 - 例如,在 Stack Overflow 上,return

https://whosebug.com

但在 iframe 中,它们是不同的:

console.log(window.location.origin);
console.log(window.origin);

https://stacksnippets.net
null

嵌入的代码段位于 iframe 内,没有 allow-same-origin。如果您更改 iframe,例如,如果您编辑 Stack Overflow 的 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 does not appear to have any authoritative links on the subject. Searching for the exact phrase + Javascript 给出了很多与 iframes 和 postMessage 有关的结果,但没有准确描述什么 window.origin 实际上是.

从子 iframe 调用 postMessage 似乎导致父 window 收到一条消息,其中 origin 属性 匹配 window.origin的子帧——没有allow-same-origin就是null,否则看起来和子帧的window.location.origin一样。

以上是我的想法我是通过猜测和验证得出的,但我还不确定。我很感激 confirmation/explanation,最好是 link 给权威来源。

我认为它没有记录在案,因为两者相同,差别不大, 大多数情况下,您选择使用哪个选项并不重要。但是,在某些情况下,其中一个优于另一个,例如:

  1. 如果在 iframe 中设置新的 URL 或另一个已经与当前 window 不同来源的 window(例如,iframe 具有与其加载的文档不同的域,并且您想更改 iframe 的 URL)将使用 window。设置新 URL 的位置。这是因为 location.href 从不同来源(域)调用时是只读的。
  2. 如果在 JavaScript 中严格使用 use 如果使用 window 可能会导致异常。 location 因为你本质上是将一个字符串分配给一个对象,所以在这里最好使用完整的 window.location.href.

参考this question

WindowOrWorkerGlobal.origin returns the origin of the environment, Location.originreturn是环境URL的起源。

不幸的是,Stack-Snippets 源自 null 的帧会导致混淆示例...

冒着解释 the specs themselves 的风险,假设我们在 https://example.com 上,然后从那里创建一个没有 src 属性的新