• 0

How do I open the SAME page on a NEW window, and cross JavaScript with them


Question

Hi people. I know this is an unusual question.

But I'm looking to open the same page on a new window. And with that new window, I would like to have cross javascript manipulation. Meaning that the new Window can manipulate the old window, and vice versa; From JavaScript to the complete DOM. Plus synchronous scrolling

Thanks a lot!

4 answers to this question

Recommended Posts

  • 0

Ok. Finally found the true answer to all of my headaches.

I'll explain what is the best way to communicate between a parent window and a child window from the same page. This logic can be tweaked for different pages (but from the same host).

Used: JavaScript + PHP


<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
<!--
var window_ = null;
var n = false; //Variable n


<?php
if(isset($_GET['n'])) //This will make the n variable go true if
//'?n' (without quotes) is found in the URL. Meaning, that the child exists
{
print('n = true;');
}
?>


function openChildWindow() //function which opens the child window.
{
if (window_ != null) //This will check if the window is opened
{
if ( window_.closed == false ) //if the window is opened, a.k.a is not closed
window_.close(); // close the window
window_ = null; // and nullify the variable, so it can be reopened if desired.
}

else
{
window_ = window.open(window.location.href+'?n'); //This is the tricky part.

/*Assign the window.location.href so it will open a new window with the same page
BUT assign it the n variable, so the GET function will receive it, and set n to true.
*/

window_.focus();
}
// Need to call on a delay to allow
// the child window to fully load...

}

function callChildWindowFunction()
{
if ( (window_ != null) && (window_.closed == false) )
{
window_.shout('bearl');
}


}
// -->

function shout(val)
{
alert(val);
}
$(document).ready(function(e) {
/*Wait for the document to load, so you can check if the variable n is true,
which means that **IT IS** the child window and it has been loaded completely. Meaning
that you can finally manipulate the child window with the parent document*/
if(n == true)
{
window.opener.callChildWindowFunction(); //Call the parent telling it "I'm ready"
}
});

</script>


<input type="button" value="Blear" onClick="openChildWindow();">[/CODE]

Now, explaining the code.

The trick here is to create an "artificial switch" which will tell the browser which page is the parent, and which is the child.

The one who does this, is the variable ***n***. By assigning it a false value, I'm telling it is the parent who has been loaded and not the child.

When the child window is opened, (please see the openChildWindow() function), it will verify if the window has been opened so it can close/open it, according to the situation.

If the window is opened, it will assign the EXACT URL plus the ?n variable which will help PHP to identify that it is the child window.

At the bottom of the opened page, after the document has been loaded, n will be true, so it will call the parent through the **window.opener** function. This will trigger a function, that will trigger the child's function (shout(val)).

You can also do this with two different pages.

Create a Page "A.html" and a Page "B.html" (Without quotes).

Page A will get the following code:

[CODE]
<script type="text/javascript">
<!--
var window_ = null;
function openChildWindow()
{
if ( (window_ != null))
{
if ( window_.closed == false )
window_.close();
window_ = null;
}

var windowUrl = 'B.html';

window_ = window.open(windowUrl);

window_.focus();
}

function callChildWindowFunction()
{
if ( (window_ != null) && (window_.closed == false) )
{
window_.shout('bearl');
}
}
// -->
</script>


<input type="button" value="Blear" onClick="openChildWindow();">[/CODE]

Page B will get this

[CODE]
<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
function shout(val)
{
alert(val);
}
$(document).ready(function(e) {
{
window.opener.callChildWindowFunction();
}
});

</script>[/CODE]

Note that the mechanics are the same. The only thing that there is no need for an "artificial switch" because the pages are different.

Just assign the page B you want to create a $(document).ready() function to verify it has loaded completely, and call the parent through the window.opener function so it can start calling the child.

If you've found a better way to do this, then go ahead and show me. setTimeOut, setInterval functions did not work because the code pre-executed before the time was out (Opera). Furthermore, this will assure you that the document was 100% loaded, and the code will not break if the user has slowpoke Internet connection.

This topic is now closed to further replies.
  • Posts

    • This sounds like underneath the nice marketing spin, either someone at Adobe got tired of their lazy devs and asked Microsoft to help them sort at least some of Adobe's ancestral spaghetti code to make it go faster, or Microsoft wanted Adobe's crap to run better on Windows to make it look better when compared to Apple, so they offered to intervene. Either way, GOOD.
    • My favorite file manager for Windows 11 finally gets a long-requested feature by Taras Buria Files is among the best File Explorer alternatives for Windows 10 and 11. This free app is packed with all sorts of features and conveniences, but there is one crucial feature that is still missing—Tree View. Fortunately, the latest update in the Preview channel finally delivers it. With version 4.1.4, which is now available for download in the Preview channel, developers implemented Tree View, a new mode that displays folders in an expandable hierarchy. Windows 11's stock File Explorer always had this feature, but it was nowhere to be found in Files until now. Starting with the latest preview update, you can expand each drive and its nested folders without leaving the current location and then open the folder you need in the main view. To try Tree View in Files, update the app to the latest preview version, then click the small arrow next to a drive to expand its content. The developers say they are rolling out Tree View in Preview first to gather feedback from users and improve the feature before bringing it to all in the stable channel. In addition to Tree View, Files 4.1.14 improves the Windows Fonts folder. You can now preview each font directly in Files with no need to open the built-in font viewer. For now, these two features are only available in the Preview channel. For those using the stable release, developers recently released version 4.1.3, with improvements for the built-in tag system, on-demand folder size calculation, and plenty of various fixes. You can check out the full release notes here. You can download Files from the Microsoft Store (paid version) or its official website (free).
    • Who is paying for this 30x scale-up? Its sounds expensive.
    • Millions of users to benefit from Windows 11's new performance boost on Adobe Photoshop by Sayan Sen Despite the advent of AI-generated imagery, Adobe's Photoshop remains one of the most popular tools on this planet. Adobe does not have a publicly reported total user count but it's probably not wrong to assume there are millions. As of 2025, Adobe Creative Cloud has had approximately 41 million paid subscribers, many of whom likely use Photoshop. In addition, more than 166,000 companies worldwide are apparently also using the app. These figures are according to a very recent report by SQ Magazine. Out of them, it is fair to assume that many are probably running Windows. As such, there is good news for these users as Microsoft has announced Photoshop is getting a big 20% performance boost on x86-64 (AMD64) systems and a 13% bump-up on Arm devices. This is definitely great news for them as many have complained about the slow performance and general sluggishness of Photoshop on Windows 11 ever since the advent of the latter back in 2021. If you are wondering how Microsoft managed to do this, the answer lies in a combination of compiler-level optimizations and a technology called Sample Profile Guided Optimization (SPGO). According to Microsoft, Adobe worked closely with the company’s Visual C++ team and adopted the latest MSVC toolchain enhancements together with SPGO to squeeze more performance out of Photoshop’s CPU-bound workloads. Unlike traditional Profile Guided Optimization (PGO), which requires developers to create special instrumented builds and run lengthy training workloads, SPGO gathers performance data directly from optimized release binaries. This means Adobe could collect real-world usage information which gives a major advantage to this technique, as companies could leverage data collected from actual customer workloads rather than only relying on synthetic benchmark runs. In theory, this should allow optimizations to better reflect how users interact with software in the real world. Thanks to this, there are improvements to code layout, function inlining, hot-and-cold code separation, and other low-level tweaks that help processors execute instructions more efficiently. Essentially the compiler is better able to identify “hot” code paths, those which are most frequently executed, and optimize them accordingly.
    • "The 2TB Samsung 990 PRO NVMe SSD hits lowest price in over three months¨ I'd prefer to see the lowest price in over a year
  • Recent Achievements

    • First Post
      Jocimo earned a badge
      First Post
    • Week One Done
      suprememobiles48 earned a badge
      Week One Done
    • One Month Later
      Windows Guy earned a badge
      One Month Later
    • One Month Later
      Prasann earned a badge
      One Month Later
    • Week One Done
      Prasann earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      521
    2. 2
      +Edouard
      174
    3. 3
      PsYcHoKiLLa
      90
    4. 4
      Steven P.
      81
    5. 5
      ATLien_0
      70
  • Tell a friend

    Love Neowin? Tell a friend!