Как уже упоминалось, это серьезная проблема в наши дни из-за, казалось бы, некорректных изменений в системе безопасности.В частности, как говорит mrec в предыдущем комментарии, Уродливая проблема здесь заключается в том, что когда ваш iframe уже находится в начале своей собственной истории - и нет способа обнаружить это условие в скрипте - выполнение другого возврата () вместо этого будет эффективно вызывать back () на содержащей странице, что почти наверняка не то, что вам нужно. - действительно, это была непреодолимая проблема для меня.
Это решение проверенная версия решения, упомянутая в ответах, в которой история обрабатывается вручную, и пользователь не может вернуться назад до начала истории.Он использовался в http://www.0AV.com для встроенной справки и здесь был упрощен, что могло привести к ошибкам в проверенной версии.Это также, вероятно, потребует доработки для вашего требования.
JS на странице хоста ..
var Hstory = [], sorc = '';
window.onmessage = function(e){ //# message fired by iFrame with onmousedown="window.top.postMessage('...','*');" or etc.
var hilitedCrefText = e.data;
switch(String(hilitedCrefText)){
case "Help_Home": //# defined in iframe
sorc = "/index.html"; //# eg
HistryManager(sorc); //# store
break;
case "Help_Back": //# defined in iframe
sorc = HistryManager(); //# retrieve
break;
default: //# anything else that is generated by a link.
HistryManager(sorc);
}
if( sorc.length > 0 ) document.getElementById('your_iframe_id').src = sorc;
}
function HistryManager(toPush) { //# history_handler
if (toPush != undefined) {
Hstory.push(toPush);
}else{
if( Hstory.length > 1 ){
var az = Hstory[Hstory.length-2]; //..
//# -2 is: -1 as is base 1, + -1 as it just stored this location, so must go back to PRIOR locastion.
Hstory = Hstory.slice(0, -1); // Reduce array (Use neg num to select from end of array)
return az;
}else{
alert('End of history. \n\n(Can not go further Back).');
return '';
}
}
}
JS / HTML на странице iframe ..
<button onclick="window.top.postMessage('Help_Back','*');">Back</button>
<button onclick="window.top.postMessage('Help_Home','*');">Home</button>
<button onclick="window.top.postMessage('helppage1.html','*');">HelpOn1</button>
<button onclick="window.top.postMessage('helppage2.html','*');">HelpOn2</button>
.. последние 2 являются примерами ссылок, по которым пользователь может переходить (и добавлять в историю), в данном случае в виде кнопок, но их легко заменить на якоря.
Надеюсь, что это кому-то поможет.(Совет: я неправильно написал некоторые из моих переменных, чтобы избежать путаницы с системными переменными).Код является дополнением к Codiad, и, следовательно, является лицензией MIT.