Solved

window.opener does not work in https, but ok in http

Posted on 2013-06-13
5
1,763 Views
Last Modified: 2013-06-13
Hello, I have a strange situation related to javascript window.opener.
I have 2 websites hosted in the same platform, UAT&PRD.
The only difference, beside the domain, is that UAT is on http, and PRD on https.

The below script works fine in UAT, but in PRD (https) I have the following error:

Error:
TypeError: window.opener.document.getElementById(...) is null

Open in new window


C#
System.Text.StringBuilder sbScript = new System.Text.StringBuilder();
                    sbScript.Append(@"setTimeout(function(){closePopup()},2000);window.opener.document.getElementById('" + anchorId + "').click();");
                    if (!ClientScript.IsStartupScriptRegistered("scriptTest"))
                        ClientScript.RegisterStartupScript(this.GetType(), "scriptTest", sbScript.ToString(), true);

Open in new window


javascript
function closePopup(){
    var opener = null;
    if (window.dialogArguments) // Internet Explorer supports window.dialogArguments
    { 
        opener = window.dialogArguments;
    } 
    else // Firefox, Safari, Google Chrome and Opera supports window.opener
    {        
        if (window.opener) 
        {
            opener = window.opener;
        }
    }       
    // write you code and refer "opener"
    window.close();
 };

Open in new window


To be mentioned that both PRD pages (opener and popup) are under https://
Thanks
0
Comment
Question by:danielivanov2
  • 3
  • 2
5 Comments
 
LVL 75

Expert Comment

by:Michel Plungjan
ID: 39246349
It is complaining the element is null, not that the opener does not exist.

Perhaps it is a security issue. Can you try lowering the security while testing?
0
 
LVL 75

Accepted Solution

by:
Michel Plungjan earned 295 total points
ID: 39246632
Ahh

I am now reading the script hidden in the C code

sbScript.Append(@"setTimeout(function(){closePopup()},2000);window.opener.document.getElementById('" + anchorId + "').click();");
                   

will of course not work since the opener is gone

Try

sbScript.Append(@"setTimeout(function(){window.opener.document.getElementById('" + anchorId + "').click();closePopup()},2000);");

or put the click code in the closePopup where it says
// write you code and refer "opener"
as

if (opener) {
  var anchor = opener.document.getElementById('" + anchorId + "')
  if (anchor) anchor.click();
}
0
 

Author Comment

by:danielivanov2
ID: 39246658
Unfortunately, same result, ok in UAT, not ok in PRD, same javascript error, which is telling me that some sort of security is preventing this script to work.
I forgot to include in initial code the anchorId tag, in opener page:

<a id="anchorId" runat="server" onclick="return true" onserverclick="postback"></a>  

Open in new window


Below the script generated by Firebug, that is causing the error:
TypeError: window.opener.document.getElementById(...) is null

Open in new window


<script type="text/javascript">
//<![CDATA[
(function() {var fn = function() {$get("ToolkitScriptManager1_HiddenField").value = '';Sys.Application.remove_init(fn);};Sys.Application.add_init(fn);})();setTimeout(function(){window.opener.document.getElementById(' MainContentPlaceHolder_anchorId').click();closePopup()},2000);(function() {var fn = function() {Sys.Extended.UI.ModalPopupBehavior.invokeViaServer('mpeTrainingFinished', true); Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);})();Sys.Application.initialize(); 

Open in new window

0
 

Author Comment

by:danielivanov2
ID: 39246718
I have finally solved it, the anchorId should have been ctl00_MainContentPlaceHolder_anchorId and not MainContentPlaceHolder_anchorId, as initially set.
however, I will set the second answer as solution, as it is correcting my code
Thanks
0
 

Author Closing Comment

by:danielivanov2
ID: 39246720
The solution is posted in the last comment, however this post is showing the correct way to handle my script
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
This article demonstrates how to create a simple responsive confirmation dialog with Ok and Cancel buttons using HTML, CSS, jQuery and Promises
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now