使用Javascript从新页面聚焦现有HTML页面

时间:2012-12-06 08:17:33

标签: javascript jquery html

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

像这样的东西

==============================================
 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。

任何建议都非常感谢。

1 个答案:

答案 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)。因此我早先的警告。 : - )