簡體   English   中英

我如何與一個彈出窗口來回通信

[英]How do I communicate back and forth with a popped up window

在我的網頁中,我使用此功能顯示一個小的彈出窗口

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;
    }

但是這種方法將使解決問題變得更加困難。 那么如何將信息從父窗口傳輸到彈出窗口,反之亦然?

postMessage的文檔中:

發送這樣的消息:

otherWindow.postMessage(message, targetOrigin);

通過執行以下JavaScript,otherWindow可以偵聽調度的消息:

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+

這是我為面臨相同問題的其他人解決此問題的方法。 我認為瀏覽器是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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM