我有一个简单的网站,其中包含指向顶部栏中不同网页的链接。
像这样的东西
==============================================
Index link | Page 1 | Page 2 | Page 3
==============================================
“网站”是船上科学数据系统的用户界面,用户通常会根据他们希望执行的任务在不同的链接之间导航。我们的想法是限制顶部栏中链接的打开页数,换句话说,在一个浏览器会话中没有打开多个“Page 1”或“Page 2”,而只是导航到现有页面。这些页面包含动态JQueryUI信息,如果打开新页面,这将丢失。
我需要能够将焦点放在现有页面上,或者如果它们尚未可见则打开它们。
如果调用页打开需要关注的页面,则下面的代码效果很好:
function launchApplication(l_url, l_windowName)
{
if ( typeof launchApplication.winRefs == 'undefined' )
{
launchApplication.winRefs = {};
}
if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )
{
launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName);
} else {
launchApplication.winRefs[l_windowName].focus()
}
}
我的问题是引用未通过调用页面生成的页面。
我做了很多研究,似乎由于安全方面的考虑,打开的浏览器窗口无法通过调用页面生成。
有什么办法可以实现这个功能吗?我知道所有网页和浏览器的网址和窗口名称仅限于Chrome和Firefox。
任何建议都非常感谢。
答案 0 :(得分:0)
警告:尝试在浏览器上操作窗口非常困难并且难以获得(并保持)跨浏览器工作,因为过去已经完成了所有恶意的事情。我建议将所有内容放在一个窗口中,并通过jQuery UI tabs或类似方式在该窗口中执行选项卡。这使您可以完全,明确地控制何时显示的内容。
但回答实际问题:
如果您知道窗口名称,那么即使页面没有打开它们,您也可以访问这些窗口(前提是没有跨域问题)。
var wnd = window.open("", "windowname");
...如果没有打开新窗口,将为您提供带有该名称的现有窗口的引用。如果没有具有该名称的窗口,它将打开一个具有该名称的新空白窗口。
所以我可能会使用它,然后查看wnd.document
以查看内容是否存在。如果不是,可能是您刚刚打开窗口,请将wnd.location
设置为正确的URL,如下所示:
// Try to get existing window
var wnd = window.open("", "thewindowname");
// Does it have our content?
if (!wnd.document.getElementById("someElementId")) {
// No, set the location
wnd.location = "/some/url";
}
// Bring it to the foreground
wnd.focus();
Live Example | Source - 请注意示例中运行的计数器,因此您知道是否刚刚激活了相同的窗口而未替换其内容(当它已经打开时)。
如果在打开时给出了窗口名称,并且通过window.open
链接打开了窗口,上面的工作方式是使用target="thewindowname"
(即使是另一页)打开的窗口。
这适用于Chrome 23,IE8和IE7(可能是IE6);它在Firefox 17,Opera 11或IE9中对我不起作用(可能不是IE10)。因此我早先的警告。 : - )