我想得到已经打开的窗口的窗口对象,我不希望在预期的窗口关闭时打开一个新窗口。
我尝试了以下选项:
var windowObj = window.open('','windowName', '');
但是,当预期窗口不存在/关闭时,它会打开一个新窗口。
请建议我使用JavaScript或jQuery获取窗口对象。
答案 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");