如何使用 window.postMessage 来动态嵌入 iframe?
How to use window.postMessage to dynamic embedded iframes?
我的页面上有多个动态框架。所有的 iframe 都在同一个域下。
例如
<iframe src="data.php?id=1"> </iframe>
<iframe src="data.php?id=2"> </iframe>
<iframe src="data.php?id=3"> </iframe>
如您所见,iframe 链接到同一页面但 ID 不同。
所以我正在使用 for 循环将数据发送到 iframe。(代码如下)
var iframes = document.getElementsByClassName('iframe');
for(var i = 0; i < iframes.length; i++)
{
iframes[i].contentWindow.postMessage("getName","http://localhost/data.php");
}
我不确定要在 postMessage
函数的 origin 参数(即第二个参数)中放入什么。
在 iframe 上我有这段代码来处理消息。
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
//event.source.postMessage("hi", event.origin);
console.log('Message received');
}
但我在控制台中没有看到任何内容。
可能是哪里出了问题??
Update
我发现除了使用 postMessage
之外,我还可以访问 javascript 函数中的内容。
现在的问题是 - 我还没有想出如何完成这个的方法。
我想通过 javascript 访问 iframe 的 title
元素的 textnode
。
这将获取您的 iFrame 的标题。
var iframes = document.getElementsByClassName('iframe');
for(var i = 0; i < iframes.length; i++){
iframes[i].contentWindow.document.getElementsByTagName('title')[0].innerHTML;
}
我的页面上有多个动态框架。所有的 iframe 都在同一个域下。 例如
<iframe src="data.php?id=1"> </iframe>
<iframe src="data.php?id=2"> </iframe>
<iframe src="data.php?id=3"> </iframe>
如您所见,iframe 链接到同一页面但 ID 不同。
所以我正在使用 for 循环将数据发送到 iframe。(代码如下)
var iframes = document.getElementsByClassName('iframe');
for(var i = 0; i < iframes.length; i++)
{
iframes[i].contentWindow.postMessage("getName","http://localhost/data.php");
}
我不确定要在 postMessage
函数的 origin 参数(即第二个参数)中放入什么。
在 iframe 上我有这段代码来处理消息。
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
//event.source.postMessage("hi", event.origin);
console.log('Message received');
}
但我在控制台中没有看到任何内容。
可能是哪里出了问题??
Update
我发现除了使用 postMessage
之外,我还可以访问 javascript 函数中的内容。
现在的问题是 - 我还没有想出如何完成这个的方法。
我想通过 javascript 访问 iframe 的 title
元素的 textnode
。
这将获取您的 iFrame 的标题。
var iframes = document.getElementsByClassName('iframe');
for(var i = 0; i < iframes.length; i++){
iframes[i].contentWindow.document.getElementsByTagName('title')[0].innerHTML;
}