2012-06-11 69 views
22

我有一个链接应该在新标签页中打开,但如果标签页已打开,请切换到该链接。 我试过使用javascript,wnd = window.open()和wnd.focus(),它可以在Chrome 19中使用,但不能在FF 13或IE 9中使用。 这里是我写的代码:在新窗口中打开链接或关注它,如果已经打开

<script type="text/javascript"> 
var loadingTableWnd; 
function openOrSwitchToWindow(url){ 
if(loadingTableWnd == undefined) 
loadingTableWnd = window.open(url,'myFrame'); 
else 
loadingTableWnd.focus(); 
} 
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a> 

任何想法如何打开或切换到每个浏览器?

编辑:我需要在新选项卡中打开链接,而不是独立窗口。

+0

有已经提交了,而一个错误以前,尚未修复 - https://bugzilla.mozilla.org/show_bug.cgi?id=416771 –

+0

该错误在2008年提交。这里是2016年的Firefox 47,但它仍然没有得到解决。任何人(有些拉)请升级? –

回答

28

不同的浏览器的行为不同的window.open()和焦点()。 对于这个代码window.open('www.sample.com','mywindow').focus()

  • 铬20打开一个新标签,并侧重于后续的open()调用,如果不管焦点()被调用或没有。
  • Firefox 13打开一个新选项卡,重点放在第一个open(),不关注随后的open()调用/忽略focus()。
  • IE 8打开一个新窗口,荣誉焦点()。
  • Safari 5会打开一个新窗口,并关注随后的open()调用,而不管是否调用focus()。

小提琴测试用:http://jsfiddle.net/jaraics/pEG3j/

+1

如果可能,请更新您对iOs 9.3.2 - iphone6的回答(Chrome或Safari无关紧要):打开一个新标签,重点关注第一次打开),不关注随后的open()调用/忽略focus()。 –

1

window.focus()被广泛支持 - http://www.w3schools.com/jsref/met_win_focus.asp并且似乎在Internet Explorer和Firefox中对我来说工作正常,问题应该出现在您的代码中。我已经创建了一个简单的jsFiddle供你测试 - http://jsfiddle.net/Pharaon/uJy5t/

+0

感谢jsfiddle,但我无法使它与标签一起工作(请参阅我的编辑)。另外我需要在当前域上打开一个页面。 (顺便说一句,你的小提琴因为某种原因被删除) – jaraics

8

你不应该需要像这样的任何逻辑。默认情况下,指定window.open()的第二个参数为窗口提供了一个“名称”,即浏览器记得的。如果您尝试拨打同名的window.open()(打开后),它不会打开一个新窗口...但您可能仍需要拨打.focus()。试试这个:

var a = window.open(url, "name"); 
a.focus(); 

这些应该是代码的唯一线在你的功能,你不需要loadingTableWnd变量...

+1

给一个名字的确可以防止打开一个新窗口。但我的问题是,用户可以导航(一些功能是通过URL中的哈希(#)来控制的),我不想重置它。我需要这个变量,因为我必须通过链接上的后续点击来访问窗口。因此需要一个全局变量。 – jaraics

+0

@Ian不适用于最新版本的Windows操作系统,比如windows server 2012 R2 – Gandhi

1

如果窗口已经打开,如果你想关注该窗口上,你可以使用

window.open('', 'NameOfTheOpenedWindow').focus(); 
相关问题