如何使postMessage适用于所有子域

时间:2013-01-21 16:44:11

标签: html5 postmessage

window.postMessage第二个属性中指定可以将消息发送到的域。有没有办法指定它适用于所有子域。

事情尝试了:

iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');

3 个答案:

答案 0 :(得分:9)

不,不可能。

唯一可以帮助自己的情况是,如果您知道目标iframe来自已知的,有限的一组起源(例如“http://a.wordpress.com”,“http:// b。 wordpress.com“和”http://c.wordpress.com“)。在这种情况下,只需为每个源创建一个postMessage请求,因为只有其中一个会成功,其他的将失败。

答案 1 :(得分:8)

可能在不知道所有域名的情况下。只需获取推荐人网址,您就可以从中获得原因:

var parentOrigin = document.referrer.match(/^.+:\/\/[^\/]+/)[0];

现在,唯一的办法是检查网址是否符合条件(以wordpress.com结尾),如果是,则允许将邮件发送到此特定域。

仅在用户在其他地方的iframe内导航之前有效:引用者已更改。但是,引荐来源可以保存在iframe的localStorage中,因此您可以列出可能的域名,并可以将邮件发送到Ivan Zuzak

提议的列表中的每个域

答案 2 :(得分:0)

您可以仅分析并询问iframe的src属性,以确定它是否属于正确的域并相应地设置targetOrigin。

yourIframe.onload = function() {
  var a = document.createElement('a');
  a.href = yourIframe.src;

  if (a.host.endsWith('yourdomain.com')) {
    var targetOrigin = a.protocol + '//' + a.host;

    yourIframe.contentWindow.postMessage(yourMessage, targetOrigin);
  }
};