Paolo Casaschi
Paolo Casaschi

Reputation: 11

window.opener issue with window.open() when replacing a window

I have a web application where page #1 opens a popup window using

window.open(myUrl, "fixedApplicationTargetId", "");

Then page #2 overwrites the same popup window with a call to window.open using the same target value

window.open(anotherUrl, "fixedApplicationTargetId", "");

At this point the content of the popup originally created by page #1 shows the new content created by page #2. So far so good with any browser.

Then the popup itself detects who last opened the popup and updated the content using window.opener. Prior to calling window.open both page #1 and page #2 create a global variable globalPageId and assign a unique number each. The popup checks the value of window.opener.globalPageId and detects which window last updated the popup content.

This is where things fall apart: the above works fine with chrome and firefox that update window.opener in the popup each time the content is updated with window.open. Instead, IE and opera always point the popup window.opener to the first window that used window.open.

Any suggestion, in a context where multiple pages call window.open on the same target, how to detect from the popup itself which window last opened the window?

Upvotes: 1

Views: 3883

Answers (1)

Frédéric Hamidi
Frédéric Hamidi

Reputation: 262979

window.opener is supposed to be read-write (except in Internet Explorer 3), so you could set it to the appropriate window yourself. Some browsers, however, restrict this operation and only allow setting opener to null to prevent security issues.

An alternate solution would be to use a custom property instead of opener. You could set it by hand:

window.open(myUrl, "fixedApplicationTargetId", "").realOpener = window;

Then use window.realOpener.globalPageId instead of window.opener.globalPageId in the rest of your code.

Upvotes: 1

Related Questions