当前位置: 首页 > 面试题库 >

跨域postMessage在IE10中是否损坏?

马欣德
2023-03-14
问题内容

我正在尝试做一个简单的postMessage例子…

  • 在IE10中
  • 窗口/标签页之间(相对于iframe)
  • 跨起源

删除这些条件中的任何一个,一切正常:-)

但是据我所知,postMessage只有两个窗口共享一个原点时,窗口间才在IE10中起作用。(事实上​​,而且很奇怪,这种行为比这更宽松:共享
宿主的 两个不同来源似乎也起作用)。

(注意:此问题涉及问题,但答案是关于IE8和IE9的,而不是10)

更多详情+示例…

启动器页面

<!DOCTYPE html>
<html>
  <script>
    window.addEventListener("message", function(e){
      console.log("Received message: ", e);
    }, false);
  </script>
  <button onclick="window.open('http://jsbin.com/ameguj/1');">
    Open new window
  </button>
</html>

启动页面

<!DOCTYPE html>
<html>
  <script>
    window.opener.postMessage("Ahoy!", "*");
  </script>
</html>

这可以在以下网址使用:因为两个页面都位于相同的来源(jsbin.com)。但是将第二页移动到其他任何地方,在IE10中失败。


问题答案:

当我最初发布此答案时,我错了:它实际上在IE10中不起作用。 显然,由于其他原因,人们发现此功能很有用,因此我将其留给后代使用。原始答案如下:

值得注意的是:该答案中的链接与postMessageIE8和IE9中独立窗口的跨域状态无关-
但是,它也是在IE10出现之前于2009年编写的。因此,我不会将其表示为已在IE10中修复。

至于postMessage它本身明显表明它在IE10中仍然被破坏,这似乎与您的演示相匹配。caniuse页面链接到本文,其中包含一个非常相关的引用:

Internet Explorer 8+部分支持跨文档消息传递:它当前适用于iframe,但不适用于新窗口。但是,Internet Explorer
10将支持MessageChannel。Firefox当前支持跨文档消息传递,但不支持MessageChannel。

因此,您最好的选择是拥有一个MessageChannel基本的代码路径,postMessage如果不存在,则回退到该路径。它不会获得IE8 /IE9的支持,但至少可以与IE10一起使用。



 类似资料:
  • 问题内容: 从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 人们经常说在Python 2中应该避免使用它。我在Python 2中的使用中发现,除非我提供所有示例这样的参数,否则它永远不会达到我期望的方式: 在我看来,

  • 问题内容: 有些人认为这样做存在一些缺陷,即使正确使用也无法保护您的查询。 带一些化石的物品作为证明。 因此,问题是:mysql [i] _real escape_string()完全不可接受吗? 还是仍然可以使用此功能来创建自己的预备语句? 请提供校对码。 问题答案: 从MySQL的C API函数描述 : 如果需要更改连接的字符集,则应使用函数而不是执行(或)语句。的工作方式类似,但也会影响所使

  • 问题内容: 首先,一个简单的测试代码: 该测试代码使用Java 7仅创建一个文件“ test_0_0.log”,无论我运行该程序的频率如何。这是预期的行为,因为构造函数中的append参数设置为true。 但是,如果我使用Java 8运行此示例,则每次运行都会创建一个新文件(test_0_0.log,test_0_1.log,test_0_2.log等)。我认为这是一个错误。 恕我直言,Java的

  • 问题内容: 据我所知,使用旧的JMM来实现懒惰单调的DCL(双重检查锁定)技巧被打破了,但是我坚信它已被新的JMM和volatile字段所修复… 但是,在这篇不错的文章中,这显然已经足够新,足以引用DCL中的新旧JMM和volatile字段,表明它仍然坏了… 我在这里到那里读到它是固定的,然后我发现了这一点……有人可以最后说它是否损坏了? 我的理解是,通过波动性地在关系发生之前保证发生的先兆并有效

  • 问题内容: 我必须从域B.com调用域A.com(使用http设置cookie)。我在B.com域上所做的就是(javascript): 这将在我测试过的所有浏览器(Safari除外)上在A.com上设置Cookie。令人惊讶的是,即使没有P3P标头,它也可以在IE6中使用。 有什么办法可以使它在Safari中工作吗? 问题答案: 来自: Safari附带了一种保守的cookie策略,该策略将co

  • 问题内容: 我有一个小问题。 如何为多个域设置Cookie? 我确实了解安全性问题,并且我确信以前已经做过。原因是SSO。 即。 将需要将登录域设置为: domain.com,domain1.com,domain2.com。 有没有简单的方法,可以使用PHP和Cookies或其他替代方法? 问题答案: domain.com绝对没有办法为domain1.com设置cookie。您试图做的事情只能通过