如何使用javascript或jQuery获取浏览器窗口对象

时间:2011-03-22 13:29:15

标签: javascript jquery

我想得到已经打开的窗口的窗口对象,我不希望在预期的窗口关闭时打开一个新窗口。

我尝试了以下选项:

var windowObj = window.open('','windowName', '');

但是,当预期窗口不存在/关闭时,它会打开一个新窗口。

请建议我使用JavaScript或jQuery获取窗口对象。

3 个答案:

答案 0 :(得分:0)

你做不到。调用window.open函数时,需要保留打开的窗口的引用。否则无法获得参考。

解决方案是仅在前一个窗口关闭时创建一个新窗口,否则重复使用它。类似的东西:

var _childWin = null;

function getChildWin() {
   if (_childWin == null || _childWin.closed) {
       _childWin = window.open(...);
   }
   return _childWin;
}

答案 1 :(得分:0)

var windowObj = window;怎么样?您甚至不需要将其分配给您自己的变量。

答案 2 :(得分:0)

有两种方法可以获得“窗口”

var thisWindow = window; // window script resides
var newOpenWindow = window.open(parameters for window here);// window opened

对于newOpenWindow,您可以在打开它之前检查它是否存在(您是否已基本上执行“打开”)通过查找错误值

if (newOpenWindow) // if true it is open

其他窗口,您将无法从脚本角度检测到它们在窗口/浏览器实例打开后超出脚本范围。

还有“包含窗口”,它实际上是iframe中的文档,这实际上是一个完全不同的事情。

编辑:说明窗口互动

创建一个名为TestCallBack.html

的子窗口

注意两个窗口中的jQuery。

显示窗口之间的一些功能交互(从子窗口和新窗口文档的jQuery对象传递):

子窗口布局:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>iamchild</title>
    <script src="JS/jQuery/jquery.js" type="text/javascript"></script>
    <script src="JS/TestCallBack.js" type="text/javascript"></script>
</head>
<body>
  Howdy
  <div id="achildy">HereIBe
    <div id="inchildy">
      I am childy text
    </div>
  </div>
</body>
</html>

TestCallBack.js文件的文本:

var ct;
function childCallBack(passstuff)
{
    alert('ct:"' + ct + '" CHILD GOT:(' + passstuff + ")");
    return ct;
};
$(document).ready(function()
{
    ct = $("#achildy").text();
    window.opener.logNewWindow(window, $(document));
});

在父窗口中打开子窗口的Javascript :(和孩子打电话的功能)

function logNewWindow(newWindow, JQnewWindowDoc)
{
    var mychildText = JQnewWindowDoc.text();//all the child doc text
    var innerChildText = $("#inchildy", JQnewWindowDoc).text();// one element text
    var gotback = newWindow.childCallBack("CHILD TEXT:" + mychildText + " INNER:" + innerChildText);
    alert("GOT:" + gotback); //child sent me this text from childCallBack
};

var AWindow = window.open("TestCallBack.html");