Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open link in new window or focus to it if already open

I have a link which should open in a new tab, but if the tab is already open, just switch to it. I've tried with javascript, wnd = window.open() and than wnd.focus(), that works in Chrome 19, but not in FF 13 or IE 9. Here's the code I've written :

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

Any idea how can I open or switch to from every browser?

EDIT: I need to open the link in a new tab, not a stand-alone window.

like image 230
jaraics Avatar asked Jun 11 '12 14:06

jaraics


2 Answers

Different browsers behave differently for window.open() and focus(). For this code window.open('www.sample.com','mywindow').focus()

  • Chrome 20 opens a new tab, and focuses on subsequent open() calls regardless if focus() is called or not.
  • Firefox 13 opens a new tab, focuses on first open(), does not focus on subsequent open() calls/disregards focus().
  • IE 8 opens a new window, honors focus().
  • Safari 5 opens a new window, and focuses on subsequent open() calls regardless if focus() is called or not.

Fiddle to test with: http://jsfiddle.net/jaraics/pEG3j/

like image 189
jaraics Avatar answered Sep 19 '22 08:09

jaraics


You shouldn't need any logic for something like this. By default, specifying the second parameter for window.open() gives the window a "name", that the browser remembers. If you try to call window.open() with the same name (after it's already been opened), it doesn't open a new window...but you might still need to call .focus() on it. Try this:

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

Those should be the only lines of code in your function, and you don't need the loadingTableWnd variable...

like image 39
Ian Avatar answered Sep 21 '22 08:09

Ian