15

So as it has been discussed elsewhere, a window can be closed by js using window.close() only if it has been opened by a script.

I have a page that offers a button to open a discussion window. The discussion window opens to a new tab with window.open(). The discussion page has a button that calls window.close(), which closes the discussion window and takes you back to previous tab, so you can continue from where you left off.

The problem is that if someone takes a the url directly to the discussion window, the close button does not work.

Is there a way to detect if the window will be closable with window.close(), so I can show the button only if it will work?

3
  • what does window.close do if it can't close the window? it might return undefined or give an error, you could check/catch that Commented Jun 1, 2015 at 14:23
  • I'm not totally sure, but I would assume that you could set var chat = window.open() when you open it form the button, and then set chat = null on close. if(chat !== null) then the window would have been opened via js Commented Jun 1, 2015 at 14:24
  • 1
    @atmd I think the OP doesn't want to show the button if its not valid. Commented Jun 1, 2015 at 14:25

2 Answers 2

16

You can check to see if window.opener is not null:

When a window is opened from another window, it maintains a reference to that first window as window.opener. If the current window has no opener, this method returns NULL. Windows Phone browser does not support window.opener. It is also not supported in IE if the opener is in a different security zone.

Sign up to request clarification or add additional context in comments.

8 Comments

This is not complete. window.opener is null on window open from an email link, but chrome still allows close.
@MichaelHanon To be honest, I'd say that's more a bug with Chrome - a window opened from an email is specifically not opened using JavaScript, so it shouldn't allow window.close to close it.
@MichaelHanon In fact, here's a bug report about this very issue - it's very old (over 9 years), but still not closed, so looks like it's probably a valid bug, but not particularly high priority to fix...!
Where did the highlighted text come from?
@MichaelHanon From the page that I linked to. It was a couple of years ago now, so it might have been rejigged a bit, but it still looks like it’s there in the notes section.
|
3

You can try using the window.opener object, which returns a reference to the window that opened the current window (if it's another window), or NULL if the current window was not opened via JS.

if (window.opener) //Show button 

3 Comments

That is correct, but James Thorpe beat you to it. Thanks though.
This is not complete. window.opener is null on window open from an email link, but chrome still allows close
But if the opener window has closed, window.opener has null setted.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.