Solved

How to trap window.location change

Posted on 2007-12-04
8
2,487 Views
Last Modified: 2008-02-12
I have frame, how can i trap events related to iframes window.locaton change.
0
Comment
Question by:Maverick_Cool
8 Comments
 
LVL 36

Accepted Solution

by:
Zyloch earned 75 total points
ID: 20406992
If the sites in your iframe are sites in your domain, you can run a function using setInterval() that will constantly check to see if the iframe's location has changed.

I don't know of a simple way with sites not on your domain. Javascript should give you a Permission Denied error in that case, because Javascript is not allowed to run cross-site.
0
 
LVL 82

Expert Comment

by:hielo
ID: 20407253
Try something similar to the following:
<html>
 <body>
<script type="text/javascript">
var lastLocation = "index2.html"
function checkSource(frameObj)
{
  if(lastLocation != frameObj.src)
  {
     alert("changed");
     lastLocation = frameObj.src;
  }
}
</script>
 <iframe src="index2.html" onload="checkSource(this)"></iframe>
</body>
</html>
0
 
LVL 5

Expert Comment

by:TheGD
ID: 20409678
Very simple solution for your problem:

1.   You need to put the following onload statement in the <BODY> tag of "each" file that is going to load inside the IFrame:

   <body onload="javascript:parent.IFrameLocationChanged(window.location);">

2. You need to define the following function in file which contain the IFrame:

   function IFrameLocationChanged(loc) {
      if (cur_iframe_location != loc) {
            cur_iframe_location = loc;
            alert("IFrame Location has changed to: " +  loc);
      }
   }

Here I have used the alert to display the location of the IFrame every time it is changed. While cur_iframe_location variable would always contain the current location of IFrame so this varible can be utilized anywhere else also.

Thanks.
0
Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 5

Expert Comment

by:TheGD
ID: 20409724
For you example sample html is given below:

This is the main file, i.e. that contain the IFrame
-------------------------------------------------------
<html>
<head>
<title> File Containing IFrame </title>
<script language=javascript>
      function IFrameLocationChanged(loc) {
            if (cur_iframe_location != loc) {
                  cur_iframe_location = loc;
                  alert("IFrame Location has changed to: " +  loc);
            }
      }
</script>
</head>
<body>
      ------------------- 
      -------------------
 
      <iframe src="abc.html"></iframe>
 
      ------------------- 
      ------------------- 
 
</body>
</html>
 
 
 
 
This is the abc.html file
-------------------------------------------------------
<html>
<body onload="javascript:parent.IFrameLocationChanged(window.location);">       
       -----------------------------
       -----------------------------
              Inside IFrame
       -----------------------------
       -----------------------------
</body>
</html

Open in new window

0
 
LVL 7

Author Comment

by:Maverick_Cool
ID: 20409811
Actually this a iframe, and i dont want touch it body, can anything be done from frame level
0
 
LVL 5

Expert Comment

by:TheGD
ID: 20410441
Hm, then use the Zyloch advice here is the solution:
<html>
<body>
 
	Below is the Iframe: <hr>
	<iframe src="abc.html" id="the_iframe" name="the_iframe"></iframe>
 
</body>
</html>
 
<script language="javascript">
 
var MiliSeconds_CheckIframeLocation = 1000; //1000 mili sec = 1 second
var cur_iframe_location = "";
 
function CheckIFrameLocationChanged() {
	if (cur_iframe_location != the_iframe.location.href) {
		cur_iframe_location = the_iframe.location.href;
		alert("IFrame Location changed: " + cur_iframe_location);
	}
}
 
setInterval("CheckIFrameLocationChanged();", MiliSeconds_CheckIframeLocation);
 
</script>

Open in new window

0
 
LVL 36

Expert Comment

by:Zyloch
ID: 20414281
Thanks for the proof of concept.
0
 
LVL 5

Assisted Solution

by:TheGD
TheGD earned 50 total points
ID: 20418314
You are welcome
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
how can i apply an assert arrayEqual function ? 2 27
Javascript_Set_dropdown_value 7 34
where is team.js? 3 26
Hide Table in merge 3 10
Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
This article will give core knowledge of JavaScript and will head in to your first JavaScript program. I am Durvesh Naik and I am here to deal with this series of JavaScript. I will teach you JavaScript in part wise , as its quite boring to read big…
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…

809 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