0

我有一个简单的网站,其中包含指向顶部栏中不同页面的链接。

像这样的东西

==============================================
 Index link  |  Page 1  |  Page 2  |  Page 3
==============================================

“站点”是船上科学数据系统的用户界面,用户通常会根据他们希望执行的任务在不同的链接之间导航。这个想法是将打开页面的数量限制为顶部栏中的链接,换句话说,在一个浏览器会话中打开的“第 1 页”或“第 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()
  }
}

我的问题是引用不是由调用页面生成的页面。

我做了很多研究,似乎出于安全考虑,调用页面未生成的打开的浏览器窗口是不可访问的。

有什么办法可以实现这个功能吗?我知道所有页面和浏览器的 URL 和窗口名称仅限于 Chrome 和 Firefox。

非常感谢任何建议。

4

1 回答 1

0

警告:试图在浏览器上操作窗口真的很难,而且很难让(并保持)跨浏览器工作,因为过去已经用它做过所有邪恶的事情。我建议将所有内容放在一个窗口中,并通过jQuery UI 选项卡或类似方法在该窗口中执行选项卡。这使您可以完全、明确地控制何时显示的内容。

但回答实际问题:

如果您知道窗口名称,那么即使页面没有打开它们,您也可以访问这些窗口(前提是没有跨域问题)。

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();

实例| 来源- 请注意示例中运行的计数器,因此您知道您是否刚刚激活了同一个窗口而没有替换其内容(当它已经打开时)。

如果在打开时给出了窗口名称,则上述内容适用于打开的窗口window.open(即使是通过另一个页面),并且通过带有target="thewindowname".

这适用于 Chrome 23、IE8 和 IE7(也可能是 IE6);它不适用于 Firefox 17、Opera 11 或 IE9(因此可能不适用于 IE10)。因此,我之前的警告。:-)

于 2012-12-06T08:23:01.833 回答