如何使postMessage适用于所有子域

use*_*126 18 html5 postmessage

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

事情尝试:

iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');
Run Code Online (Sandbox Code Playgroud)

Iva*_*zak 9

不,不可能.

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


smn*_*brv 9

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

var parentOrigin = document.referrer.match(/^.+:\/\/[^\/]+/)[0];
Run Code Online (Sandbox Code Playgroud)

现在,唯一的办法是检查URL是否与条件匹配(以...结尾wordpress.com),如果是,则允许将消息发送到此特定域.

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

  • 直到我购买 wordpress.com.au(或其他允许这样做的顶级域名)并收到您的精彩消息。 (2认同)