专注于处理警报的工作

3

我有一个相当简单的函数:

function takeFocus() {
   setTimeout(function(){window.focus();alert("OK");},1000);
} 

这是在我从另一个窗口打开的 JavaScript 中。

当用户重新打开子窗口时,我想切换到它并将其置于前台,而无需重新加载它。像上面那样调用 takeFocus() 可以正常工作,但它会弹出提示框,这不是我想要的。

当我删除提示时,背景窗口仍然保持在后台!我该如何让它工作?

我已经尝试了各种方式来实现这一点,但到目前为止都失败了。

jQuery 可用。编写适用于 HTML5 的现代浏览器。


更多信息:我在上面的例程中删除了window.focus(),保留了alert - 这将窗口带到了前台。看起来window.focus()在这种情况下什么也没做。但我仍然不明白如何纠正代码 :( - Ian
2个回答

0

这段代码在子窗口文件中吗? 尝试像这样在主页面使用焦点:

function newPopup(url) {
popupWindow = window.open(
url,'popUpWindow3','height=500,width=900,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=no,menubar=no,location=no,directories=no,status=no');
popupWindow.focus();
}

这确实会将窗口置于前台,但它也会重新加载带有URL的窗口,这正是我想避免的。到目前为止,我的测试表明打开操作总是会重新加载内容 - 尽管我可以让内容在同一个窗口中加载。 - Ian
可以将页面URL保存在一个数组对象中,并在调用函数之前进行验证,如果不存在,则创建并聚焦,否则聚焦。var popups_holder = new Object(); function popupOpen(target_url, window_name){ if(typeof(popups_holder[window_name]) == undefined || typeof(popups_holder[window_name]) == 'undefined'){ var w = window.open(target_url, window_name, 'width=450, height=450'); popups_holder[window_name] = w; }else{ popups_holder[window_name].focus(); } }链接 - Leandro Brito
Leandro,那是我开始的地方。发现“popups_holder [window_name] .focus();”不起作用,因此尝试进行调度,然后编写takeFocus()例程以在正确的上下文中进行调度。我仍然没有找到在不刷新URL或使用警报的情况下将子窗口带到前景的方法。 - Ian

0

我有一半的答案。使用这段代码打开窗口,我在Chrome中得到了所需的行为。不幸的是,FireFox 23.01和IE 10仍然忽略win.focus()。

function openWin(ID) { // open workshop ID in another window
   var URL = '/chatroom.php?ID='+ID;
   var name = 'Chat'+ID;   // so if you open it twice it reopens the window.
   var win = window.open('',name); // no URL - won't refresh
   if (win.location == "about:blank") { // new open
      win.location.href = URL; 
      windows[windows.length] = win; // store for later.
  }  
  win.focus();
}

FF和IE第一次打开窗口时都可以正常工作,第二次不会刷新并且不会丢失数据,但也不会将其置于前台 :(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接