【问题标题】:Any way to make postMessage work with HTTPS?有什么方法可以使 postMessage 与 HTTPS 一起工作?
【发布时间】:2013-10-05 09:34:26
【问题描述】:

我有一个浏览器书签,可以在页面上加载 iframe。然后我需要该 iframe 能够将字符串传递回父窗口。子页面有以下功能:

function post(m){
parent.postMessage(m,'*');
}

只要子页面(加载到 iframe 中的页面)位于 http 上,此功能就可以正常工作。但是当它是 https 时, postMessage 不起作用。我无法找到任何有关此的文档,或任何绕过它的方法。

有什么想法吗?

编辑:

这在 FF 和 Chrome 上都会发生(没有尝试过 IE)。澄清一下:iframe 确实加载了,只是 postMessage 没有被执行。在 HTTP 页面上一切正常。我用来接收字符串的代码如下:

function listener(event){
if ( event.origin !== "http://www.mysite.com" )
return

if (event.data=="string1"){function1();}
if (event.data=="string2"){function2();}
}

if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}

【问题讨论】:

  • 什么浏览器?在另一边发布消息事件处理程序的代码。你确定 iframe 正在加载吗? Firefox 最近进行了更改,因此默认情况下不安全的 iframe 不会加载到安全的父级中。
  • 嗨@DG。我已经更新了问题。

标签: javascript iframe cross-domain bookmarklet postmessage


【解决方案1】:

我想你需要早上的咖啡。

这是你的解决方法:

if ( event.origin.replace('https:', 'http:') !== 'http://www.mysite.com'  ) return;

【讨论】:

  • 你听到外面那么大的噪音了吗?那是我的手掌敲击我的额头的声音。我想全世界都听到了……谢谢!
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多