什么是window.origin?

问题描述 投票:2回答:1

什么是window.origin?它似乎没有在the usual place中记录。

它看起来可能与window.location.origin非常相似 - 例如,在Stack Overflow上,两者都返回

https://stackoverflow.com

但在iframe内部,它们是不同的:

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

嵌入的片段在没有iframeallow-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>s在其他网站上展示了同样的行为。

Google似乎没有任何关于该主题的权威链接。搜索exact phrase + Javascript提供了许多与iframes和postMessage相关的结果,但没有确切描述window.origin实际上是什么。

从孩子postMessage调用iframe似乎导致父窗口接收到origin属性与子框架的window.origin匹配的消息 - 没有allow-same-origin,它是null,否则看起来它与孩子的window.location.origin相同。

以上是我认为我从猜测和检查中发现的,但我还远未确定。我很感激确认/解释,最好是链接到权威来源。

javascript html iframe cross-domain
1个回答
1
投票

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

  1. 如果在iframe或其他窗口中设置新URL与当前窗口不同,则同源策略会发生冲突(例如,iframe的域名与加载的文档不同,并且您希望更改URL iframe)会使用窗口。用于设置新URL的位置。这是因为当从不同的源(域)调用时,location.href是只读的。
  2. 如果在JavaScript中使用严格使用可能会导致异常,如果使用窗口。因为您实际上是在为对象分配字符串,所以在这里最好使用完整的window.location.href。

请参阅this question以供参考。

© www.soinside.com 2019 - 2024. All rights reserved.