1

在我的网页中,我使用此功能显示一个小弹出窗口

function popup (url) 
{
     poppedUpWindow= window.open(url, "PopupWindow", "width=400,height=300");
     poppedUpWindow.focus();
     return false;
}

我需要在 thoos 2 个窗口之间共享对象。我尝试做这样的事情,但它现在可以工作

poppedUpWindow.document.documentElement.addEventListener("load", foo, false);

我也有可能做这样的事情

 function popup (url) 
    {
         poppedUpWindow= window.open(url, "PopupWindow", "width=400,height=300");
         var tmp = poppedUpWindow.document;
         tmp.write('<html><head><title>popup</title>');
         ....
         tmp.close();
         poppedUpWindow.focus();
         return false;
    }

但是这种方法会使解决问题变得更加困难。那么我应该如何将信息从父窗口传输到弹出窗口,反之亦然?

4

2 回答 2

1

postMessage的文档中:

发送这样的消息:

otherWindow.postMessage(message, targetOrigin);

otherWindow 可以通过执行以下 JavaScript 来侦听已分发的消息:

window.addEventListener("message", receiveMessage, false);

function receiveMessage(event)
{
  if (event.origin !== "http://example.org:8080")
    return;

  // ...
}

请记住浏览器支持:http
://caniuse.com/#feat=x-doc-messaging IE 8+、Firefox 3+、Chrome 所有版本、Opera 9.5+、Safari 4+

于 2013-07-04T16:19:49.047 回答
1

这是我为面临相同问题的其他人解决问题的方法。我正在考虑浏览器是 chrome 还是 firefox。我没有测试其他浏览器。Chrome 中的“加载”事件有时会在整个 javascript 文件加载之前被触发。

function popup (url) 
{
     poppedUpWindow= window.open(url, "PopupWindow", "width=400,height=300");
     poppedUpWindow.focus();


if(is_chrome)
         {
         window.setTimeout("doSomething()",300); //this value could vary! 300ms seemed fine to me!
         }
     else
         {
            fenster.addEventListener('load', doSomething, true); //  FireFox 
         }
 return false;
}

function doSomething()
{
    poppedUpWindow.postMessage("hi","*");
var a = poppedUpWindow.document.getElementById("b");
// do anything you want..

}

在另一个html中应该有这个方法

function receiveMessage(event)
{
  if (event.origin !== stringUrlOfFirstWebPage)
    { 
       return;
    }
    event.source.postMessage("hey!",event.origin);//talking back to the first web page
}
于 2013-07-05T14:54:58.457 回答