我想获取所有已经打开的子窗口的引用,有什么办法吗?我不是使用 child = window.open(....)
,而是使用 window.open(....)
打开多个子窗口。
我想获取所有已经打开的子窗口的引用,有什么办法吗?我不是使用 child = window.open(....)
,而是使用 window.open(....)
打开多个子窗口。
window.open()
函数:var openedWindows = [];
window._open = window.open; // saving original function
window.open = function(url,name,params){
openedWindows.push(window._open(url,name,params));
// you can store names also...
}
在调用window.open()
之前运行此代码。打开的窗口的所有引用都将存储在openedWindows
数组中。您可以随时访问它们。
运行此代码以在调用 window.open()
之前生成一个新的、空的数组,以便在执行后续操作时使用该数组来跟踪打开的窗口。
var openedWindows = [];
window.open2()
:) 并将所有现有的.open()
调用更改为.open2()
。但是看起来@Govind不想在他的代码中做任何更改... - Hrant Khachatrianwindow._open.apply(window, arguments)
,因为传递 undefined
作为参数和不传递任何参数会产生不同的行为。我相信明确传递 undefined
将禁用所有窗口功能。 - pushkin我不认为你可以这样做,除非你知道窗口的名称,而我猜你不知道它们的名称。(如果你知道它们的名称,你可以使用window.open("", "name")
来获取对它们的引用。)
更好的选择当然是事先记住从window.open
返回的引用—— 但你已经知道了。:-)
window.open("", "name")
检索它们之外,我不认为有第三种选择。 - T.J. Crowder好的,我使用Oracle CRM onDemand中的答案来禁用弹出窗口中的一个选择项,并从父窗口执行脚本,然后它就起作用了!(我无法控制弹出窗口的生成,它们是由应用程序框架打开的)
让我们看看我是怎么做到的:
背景:在详细页面中,用户可以通过单击放大镜图标 >>> 添加一些信息,然后会打开一个包含搜索表单的新窗口,但是一个选择项正在困扰管理员:如果用户更改其默认值,则他/她将获得对禁止记录的访问权限!!我的天啊!
第一种方法: 立即禁用该选择项!
尝试:我使用浏览器的开发工具(F12)找到了图片的onclick属性。那里有一个openAssocPopup方法,然后我知道了子窗口的名称:'OccamPopup1' :)
好的!所以让我们进行一些魔法(在父窗口中执行):
window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true);
我认为这可能会有帮助,因为这个问题对我也有帮助。你是正确的。现在我正在尝试将子文档对象包装在父级jQuery对象中,以便可以访问整个子DOM...但这是另外一个故事...
var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1');
try {
if (signupWindow.document.location.href == "about:blank") {
signupWindow.close();
signupWindow = undefined;
}
} catch (e) { }
这将重新获取命名的打开窗口的引用。如果它不存在,您会看到一个小窗口弹出一秒钟。
如果您知道窗口的可能名称,可以循环遍历这些名称,尝试定位它们。