javascript - 有什么方法可以让 postMessage 与 HTTPS 一起使用吗?

标签 javascript iframe cross-domain bookmarklet postmessage

我有一个浏览器书签,它在页面上加载 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)
}

最佳答案

我想你需要早上喝咖啡。

这是您的修复:

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

关于javascript - 有什么方法可以让 postMessage 与 HTTPS 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078678/

相关文章:

javascript - Firefox 中的 "c.defaultView.getComputedStyle() is null"问题

javascript - 根据内容动态更改 iFrame 高度将不起作用

javascript - 如何在 Firefox 中允许来自 greasemonkey 脚本的跨源请求?

javascript - Chrome 调试器 : What's a "PropertyBag" object?

javascript - 使变量在没有闭包的情况下可用于异步调用

javascript - 为什么 `is` 属性仅适用于覆盖内置元素的 Web 组件?

javascript - 无法获取Ajax调用的返回

javascript - 框架中的谷歌 View ,因为它将 'X-Frame-Options' 设置为 'SAMEORIGIN'

javascript - 如何在数据类型为 'text' 的 jQuery 中执行跨域 ajax?

php - Ajax:跨域请求未使用 PHP 在 Safari IOS 中设置 cookie