在window.postMessage
第二个属性中指定我的消息可以发送到的域。有没有办法指定它适用于所有子域。
尝试的事情:
iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');
在window.postMessage
第二个属性中指定我的消息可以发送到的域。有没有办法指定它适用于所有子域。
尝试的事情:
iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');
在不知道所有域名的情况下是可能的。只需获取一个引荐来源网址,您实际上就可以从中获得来源:
var parentOrigin = document.referrer.match(/^.+:\/\/[^\/]+/)[0];
现在,唯一要做的就是检查 URL 是否符合条件(以 结尾wordpress.com
),如果是,则允许将消息发送到此特定域。
仅在用户在 iframe 内导航到其他地方之前有效:引荐来源网址已更改。但是,引荐来源网址可以保存在 iframe 中,localStorage
因此您有一个可能的域列表,并且可以将消息发送到Ivan Zuzak建议的列表中的每个域
不,不可能。
您可以帮助自己的唯一情况是,如果您知道目标 iframe 来自已知的有限来源集(例如“http://a.wordpress.com”、“http://b.wordpress.com ”和“http://c.wordpress.com”)。在这种情况下,只需为每个源发出 postMessage 请求,因为只有一个会成功,而其他会失败。
您可以只解析和询问src
iframe 的属性以确定它是否属于正确的域并相应地设置 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);
}
};