20

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

尝试的事情:

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

3 回答 3

13

在不知道所有域名的情况下是可能的。只需获取一个引荐来源网址,您实际上就可以从中获得来源:

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

现在,唯一要做的就是检查 URL 是否符合条件(以 结尾wordpress.com),如果是,则允许将消息发送到此特定域。

仅在用户在 iframe 内导航到其他地方之前有效:引荐来源网址已更改。但是,引荐来源网址可以保存在 iframe 中,localStorage因此您有一个可能的域列表,并且可以将消息发送到Ivan Zuzak建议的列表中的每个域

于 2017-02-02T17:08:11.130 回答
10

不,不可能。

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

于 2013-01-25T09:27:40.813 回答
0

您可以只解析和询问srciframe 的属性以确定它是否属于正确的域并相应地设置 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);
  }
};
于 2019-01-15T16:17:29.313 回答