Firefox history.go(-1) not working as needed

R

Raffi

Hi,

My web page has an iframe with a list of items from a database. These
items are html links and when clicked they execute a server side
script to update the database and reload the iframe with the updated
links. The list is sometimes long and I would like the user to return
to the same iframe anchor point as they were before. I use the
following code in the database update script (which also reloads the
iframe) which works fine with Internet Explorer but returns the user
to the top of the iframe with Firefox.

window.history.go(-1);

Any ideas/suggestions on how to get the desired behavior in both IE
and Firefox?

Thanks,
Raffi
 
A

ASM

Raffi a écrit :
Any ideas/suggestions on how to get the desired behavior in both IE
and Firefox?

location.href=self.location; ?

or links in normal html ?

<p><a href="?feature=001#f001" name="f001">feature 001</a>
<p><a href="?feature=002#f002" name="f002">feature 002</a>
<p><a href="?feature=003#f003" name="f003">feature 003</a>
 
R

Raffi

Raffia écrit :




location.href=self.location; ?

or links in normal html ?

<p><a href="?feature=001#f001" name="f001">feature 001</a>
<p><a href="?feature=002#f002" name="f002">feature 002</a>
<p><a href="?feature=003#f003" name="f003">feature 003</a>

I tried location.href=self.location; and it resulted in an endless
loop. The anchored link will not work since it's not the linkthat
reloads the iframe but the script that is executed when the user
clicks the link. Here are more details. The main page has an iframe
which has a number of links like the following:

<a href="javascript:window.location.href = './script.xxx?
varable=choice1>Choice1</A>

script.xxx then updates the database using the variable and reloads
the iframe content. Currently

parent.history.go(-1);

works fine for IE but not for Firefox.

Any help will be appreciated.

Thanks,
Raffi
 
A

ASM

Raffi a écrit :
I tried location.href=self.location; and it resulted in an endless
loop.

Not very surprised :)
The anchored link will not work since it's not the link that
reloads the iframe but the script that is executed when the user
clicks the link. Here are more details. The main page has an iframe
which has a number of links like the following:

<a href="javascript:window.location.href = './script.xxx?
varable=choice1>Choice1</A>

I do not understand where is the script (JS script) ?

Youre 'JS' script 'window.location' is exactly same as :

<a href="./script.xxx?varable=choice1">Choice1</A>

What is what I proposed,
except I've introduced anchors in links AND in calls

<a href="./script.xxx?variable=choice1#choice1" name="choice1" >Choice1</A>


If you want absolutely to use JS :

<a href="./script.xxx" name="choice1"
onclick="this.href+='?variable='+this.name+'#'+this.name;">Choice1</A>

or :

<script type="text/javasccript">
window.onload = function() {
var L = document.links;
for(var i=0; i<L.length; i++)
if(L.href.indexOf('script')>0)
L.href += '?variable='+L.name+'#'+L.name;
}
</script>

<a href="./script.xxx" name="choice1">Choice 1</A>
<a href="./script.xxx" name="choice2">Choice 2</A>
<a href="./script.xxx" name="choice3">Choice 3</A>
 
R

Raffi

Raffia écrit :


I tried location.href=self.location; and it resulted in an endless
loop.

Not very surprised :)
The anchored link will not work since it's not the link that
reloads the iframe but the script that is executed when the user
clicks the link. Here are more details. The main page has an iframe
which has a number of links like the following:
<a href="javascript:window.location.href = './script.xxx?
varable=choice1>Choice1</A>

I do not understand where is the script (JS script) ?

Youre 'JS' script 'window.location' is exactly same as :

<a href="./script.xxx?varable=choice1">Choice1</A>

What is what I proposed,
except I've introduced anchors in links AND in calls

<a href="./script.xxx?variable=choice1#choice1" name="choice1" >Choice1</A>

If you want absolutely to use JS :

<a href="./script.xxx" name="choice1"
onclick="this.href+='?variable='+this.name+'#'+this.name;">Choice1</A>

or :

<script type="text/javasccript">
window.onload = function() {
var L = document.links;
for(var i=0; i<L.length; i++)
if(L.href.indexOf('script')>0)
L.href += '?variable='+L.name+'#'+L.name;
}
</script>

<a href="./script.xxx" name="choice1">Choice 1</A>
<a href="./script.xxx" name="choice2">Choice 2</A>
<a href="./script.xxx" name="choice3">Choice 3</A>


Hello Stephane,

Thanks for your response and suggestions. It helped me clean up my
html code a little.

Your suggestions for the anchor did not work however. I think the
reason is the anchor information in the html link is passed along to
script.xxx. Once this script runs the "window.history.go(-1);" at the
end of the script does the reloading of the iframe. I think I need
something in script.xxx to make the iframe scroll to the anchor after
reloading.

Thanks,
Raffi
 
A

ASM

Raffi a écrit :
Your suggestions for the anchor did not work however. I think the
reason is the anchor information in the html link is passed along to
script.xxx.

Isn't script.xxx a file (a php file whom script does something) ?
Once this script runs the "window.history.go(-1);" at the
end of the script

Why do you keep this JS in your file 'script.xxx' ?
You don't need it with the attached anchor (#choicexx)

I do not understand why you have to go back ...
'script.xxx' can't content what that is to display ?

The clicked link calls the file 'script.xxx'
with attached to its url :
- the variable and ist value : ?variable=choicexx
and
- the anchor to reach on (re)loading : #choicexx

It is simple and normal html feature
I think I need
something in script.xxx to make the iframe scroll to the anchor after
reloading.

on reloading you only need to reach the mentioned anchor

Try this example
- where the file calls itself instead to call another file
(isn't it this file which is the src of iframe ?)
- where there is a (JS) script about the attached variable

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled</title>
<style type="text/css" title="text/css">
div p { height: 150px; border: 1px solid; margin-top: 50px; }
</style>
<script type="text/javascript">
onload = function() {
alert(window.location.search);
}
</script>
</head>
<body>
<div>
<p><a href="?feature=256#f256" name="f256">feature 256</a>
<p><a href="?feature=001#f001" name="f001">feature 001</a>
<p><a href="?feature=002#f002" name="f002">feature 002</a>
<p><a href="?feature=003#f003" name="f003">feature 003</a>
<p><a href="?feature=004#f004" name="f004">feature 004</a>
<p><a href="?feature=005#f005" name="f005">feature 005</a>
<p><a href="?feature=006#f006" name="f006">feature 006</a>
<p><a href="?feature=007#f007" name="f007">feature 007</a>
</div>
</body>
</html>
 
T

The Magpie

Raffi said:
Hi,

My web page has an iframe with a list of items from a database. These
items are html links and when clicked they execute a server side
script to update the database and reload the iframe...

window.history.go(-1);

Any ideas/suggestions on how to get the desired behavior in both IE
and Firefox?
The history refers to web pages loaded within the browser. The loading
of an iframe from the server to an area within the web page does not
change the web page that was loaded, therefore the history does not
record the change of the update. This is as it ought to be and, if it
does not work that way in MSIE then I am afraid that IE is wrong and
Firefox is right. You are dealing with it on your server and it is
your server that should permit the reloading of the previous iframe
contents, not the browser page code in Javascript.
 
R

Raffi

Raffia écrit :




Isn't script.xxx a file (a php file whom script does something) ?


Why do you keep this JS in your file 'script.xxx' ?
You don't need it with the attached anchor (#choicexx)

I do not understand why you have to go back ...
'script.xxx' can't content what that is to display ?

The clicked link calls the file 'script.xxx'
with attached to its url :
- the variable and ist value : ?variable=choicexx
and
- the anchor to reach on (re)loading : #choicexx

It is simple and normal html feature


on reloading you only need to reach the mentioned anchor

Try this example
- where the file calls itself instead to call another file
(isn't it this file which is the src of iframe ?)
- where there is a (JS) script about the attached variable

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled</title>
<style type="text/css" title="text/css">
div p { height: 150px; border: 1px solid; margin-top: 50px; }
</style>
<script type="text/javascript">
onload = function() {
alert(window.location.search);
}
</script>
</head>
<body>
<div>
<p><a href="?feature=256#f256" name="f256">feature 256</a>
<p><a href="?feature=001#f001" name="f001">feature 001</a>
<p><a href="?feature=002#f002" name="f002">feature 002</a>
<p><a href="?feature=003#f003" name="f003">feature 003</a>
<p><a href="?feature=004#f004" name="f004">feature 004</a>
<p><a href="?feature=005#f005" name="f005">feature 005</a>
<p><a href="?feature=006#f006" name="f006">feature 006</a>
<p><a href="?feature=007#f007" name="f007">feature 007</a>
</div>
</body>
</html>

Hi,

script.xxx does not display anything. It is called by the link in the
iframe to update the database. Once it is done updating the database,
it returns the user back to the iframe script to display the iframe
with the updated database content. So if script.xxx did not reload the
iframe script, the iframe would remain blank.

So the question remains. Is there a way to reload the iframe script
from script.xxx where the iframe will scroll down to where the client
clicked the link. This can be accomplished with IE using
history.go(-1), but doesn't work for Firefox.

Any help is greatly appreciated.

Thanks,
Raffi
 
R

Raffi

Hi,

script.xxx does not display anything. It is called by the link in the
iframe to update the database. Once it is done updating the database,
it returns the user back to the iframe script to display the iframe
with the updated database content. So if script.xxx did not reload the
iframe script, the iframe would remain blank.

So the question remains. Is there a way to reload the iframe script
from script.xxx where the iframe will scroll down to where the client
clicked the link. This can be accomplished with IE usinghistory.go(-1), but doesn't work for Firefox.

Any help is greatly appreciated.

Thanks,Raffi- Hide quoted text -

- Show quoted text -

I figured out a way to get it done using cookies. Below are functions
to create a cookie, read a cookie and delete a cookie, as well as to
get the scroll position of a page and scroll a page to a known
position. The way it works is pretty simple.

1. Get the vertical scroll position
2. Store it in a cookie
3. Run script.xxx
4. Reload the iframe
5. Retrieve the scroll position from the cookie
6. Scroll the iframe to the correct position

Here are the functions:

function createCookie(name, value, days)
{
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
var ca = document.cookie.split(';');
var nameEQ = name + "=";
for(var i=0; i < ca.length; i++) {
var c = ca;
while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete
spaces
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,
c.length);
}
return null;
}

function eraseCookie(name)
{
createCookie(name, "", -1);
}

function setScroll(){
var yScrollTo = readCookie('testCookie');
if(yScrollTo){
window.scrollTo(0,yScrollTo);
eraseCookie('testCookie');
}
}


function saveScroll(){
if(typeof(window.pageYOffset)=="number"){
y=window.pageYOffset;
}else{
y=document.body.scrollTop;
}
createCookie('testCookie', y, 3);
}

And for the body of the iframe:

<body onclick="saveScroll()" onLoad="setScroll()">

Raffi
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top