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

Discussion in 'Javascript' started by Raffi, Jun 23, 2007.

  1. Raffi

    Raffi Guest

    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
     
    Raffi, Jun 23, 2007
    #1
    1. Advertising

  2. Raffi

    ASM Guest

    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>

    --
    Stephane Moriaux et son (moins) vieux Mac
    Stephane Moriaux and his (less) old Mac already out of date
     
    ASM, Jun 23, 2007
    #2
    1. Advertising

  3. Raffi

    Raffi Guest

    On Jun 23, 2:40 pm, ASM <>
    wrote:
    > Raffia é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>
    >
    > --
    > Stephane Moriaux et son (moins) vieux Mac
    > Stephane Moriaux and his (less) old Mac already out of date


    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
     
    Raffi, Jun 24, 2007
    #3
  4. Raffi

    ASM Guest

    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>

    --
    Stephane Moriaux et son (moins) vieux Mac
    Stephane Moriaux and his (less) old Mac already out of date
     
    ASM, Jun 24, 2007
    #4
  5. Raffi

    Raffi Guest

    On Jun 24, 6:16 am, ASM <>
    wrote:
    > 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>
    >
    > --
    > Stephane Moriaux et son (moins) vieux Mac
    > Stephane Moriaux and his (less) old Mac already out of date


    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
     
    Raffi, Jun 24, 2007
    #5
  6. Raffi

    ASM Guest

    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>



    --
    Stephane Moriaux et son (moins) vieux Mac
    Stephane Moriaux and his (less) old Mac already out of date
     
    ASM, Jun 25, 2007
    #6
  7. Raffi

    The Magpie Guest

    Raffi wrote:
    > 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.
     
    The Magpie, Jun 25, 2007
    #7
  8. Raffi

    Raffi Guest

    On Jun 24, 6:13 pm, ASM <>
    wrote:
    > Raffia é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>
    >
    > --
    > Stephane Moriaux et son (moins) vieux Mac
    > Stephane Moriaux and his (less) old Mac already out of date


    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
     
    Raffi, Jun 26, 2007
    #8
  9. Raffi

    Raffi Guest

    On Jun 25, 9:45 pm, Raffi <> wrote:
    > On Jun 24, 6:13 pm, ASM <>
    > wrote:
    >
    >
    >
    >
    >
    > > Raffia é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>

    >
    > > --
    > > Stephane Moriaux et son (moins) vieux Mac
    > > Stephane Moriaux and his (less) old Mac already out of date

    >
    > 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
     
    Raffi, Jun 26, 2007
    #9
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stuart Palmer

    History not working correctly

    Stuart Palmer, Jun 2, 2004, in forum: HTML
    Replies:
    0
    Views:
    382
    Stuart Palmer
    Jun 2, 2004
  2. John Kotuby

    history.go('url') not working in IE7

    John Kotuby, Jan 2, 2008, in forum: ASP .Net
    Replies:
    2
    Views:
    523
    John Kotuby
    Jan 3, 2008
  3. Sam Stephenson
    Replies:
    1
    Views:
    228
    Andrew Walrond
    Jun 18, 2005
  4. Replies:
    2
    Views:
    300
    nutso fasst
    Oct 17, 2006
  5. Niall
    Replies:
    3
    Views:
    171
    Niall
    Dec 6, 2006
Loading...

Share This Page