【发布时间】:2018-11-14 03:19:28
【问题描述】:
TL;DR:是否可以在父窗口上定义一个跨域属性来充当子窗口可访问的标志?
我有一个可以在 iframe 或顶级浏览上下文中运行的 JavaScript 应用程序。在 iframe 中时,应用程序将尝试使用 window.postMessage 查询父窗口中的功能。这个特性可能不存在,所以我封装了window.postMessage,实现了超时。但是,超时时间必须很长,当该功能不存在时,这会对加载时间产生负面影响。是否可以在父窗口上定义一个跨域属性作为标志来代替超时?
var parent = window.parent;
if (parent && parent.hasFeature) {
window.postMessage(...);
return;
}
...
我没有看到Object.defineProperty 的访问描述符提供任何支持,看起来cross-origin property descriptor map 是内部的。
【问题讨论】:
-
你不能只发一条消息,看看你是否得到回报吗?需要父母监听它并发送响应。
-
为什么要使用长超时?回复
postMessage应该很快。 -
应用程序需要知道该功能在用户可用之前是否可用,并且存在父级不会响应的情况。最初,超时时间为 100 毫秒。但是,在测试中,我不得不将其增加到 ~400 毫秒,这是在不存在该功能时明显且有保证的加载时间延迟。
标签: javascript same-origin-policy