Question

I have a page with dynamic data loaded by some ajax and lots of javascript.

the page contains a list from which the user can choose and each selected value loads new data to the page.

One of these data items is a url provided to an iframe.

I use jQuery BBQ: Back Button & Query Library to simulate the browser-back behavior.

All works well besides the fact that when i click the back button for the first time the iframe goes back to its previous location and then I need to click back again to make the page go back.

Is there a way to disable the iframe's back behavior?

Was it helpful?

Solution

I've found the answer to my problem guess it could be useful for others out there.

The problem was with the way i assigned new URLs to my Iframe, i used Jquery so it looked something like that:

$('#myIFrame').attr('src',newUrl);

When assigning the URL in that manner it adds a new entry to the browser's list of visited URLs to go back to.
That wasn't the desired behavior, so after some googling i found that you can assign a new URL to an Iframe object without adding it to the 'back-list', it looks like that:

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

This way my back button behave exactly as expected.

btw, i got my answer from here.

Hope this was helpful to you as it was to me.

OTHER TIPS

The accepted answer does not seem to work if you try to set a cross-domain URL for the IFrame. As a workaround, I detached the IFrame from the DOM before setting the src (using jQuery).

// remove IFrame from DOM before setting source, 
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();

iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);

I suggest you create a hyperlink within your iframe. call it 'Back' and put a href as javascript:history.back(-1)That's the best you can do I think.

Basically you need to prevent the addition of new history entries in the iframe, history.replaceState introduced in HTML5 would work in most cases.

history.pushState(state, title, url);

No, this is entirely up to the browser.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top