При нажатии ссылки её обработчик вставляет изображение в iframe с соответствующим изменением адресной строки браузера:
1.
Фрагмент главной страницы HTML
<form name="F1" id="F1" action="http://site.com/cgi-bin/cgiproject1.cgi" method="POST" target="ram">
<input type="text" name="E1" id="E1" style="display: none" value="" maxlength=1>
<input type="submit" name="B1" id="B1" style="display: none" value="">
</form>
<iframe name="ram" id="ram" style="position: absolute; left: 46%; top: 200px; width: 540px; height: 484px" FRAMEBORDER=0 SCROLLING="no"></iframe>
2.
Фрагмент загружаемого содержимого IFRAME
<BODY ONLOAD="setupHistoryClicks()">';
<div id="gam" style="position: absolute; left: 2px; top: 2px; color: white; height: 460px; width: 536px; background-color: #f16529">
<p><a id="photoaddr" href="http://site.com/tst/name1.html">Addr ></a></p>;
<figure id="photo"><img id="photoimg" src="http://site.com/tst/gam/photo1.jpg" width="500" height="375">
<figcaption>Text1</figcaption></figure></div></BODY>
3.
Обработчик события CLICK
function swapPhot(href) {
ct=["name1.html","name2.html","name3.html","name4.html","name5.html","name6.html"];
var j,ck=href.split("/").pop();
for (var i=0;i<6;i++){if (ck==ct[i]){j=i;}}
var bd=String(j);
document.getElementById('E1').value=bd;
document.forms.F1.submit();
return true;
}
function addClicker(link) {
link.addEventListener("click", function(e) {
if (swapPhot(link.href)) {
parent.history.pushState(null, null, link.href);
e.preventDefault();}}, true);
}
function setupHistoryClicks() {
addClicker(document.getElementById("photoaddr"));
}
При попытке навигации по сайту с помощью соответствующих кнопок обработчик данного события вначале ведёт себя так, как будто записи в истории продублировались, а затем последние вообще начинают неожиданно пропадать:
4.
Обработчик события POPSTATE
function supports_history_api() {
return !!(window.history && history.pushState);
}
function swapPhoto(href) {
ct=["name1.html","name2.html","name3.html","name4.html","name5.html","name6.html"];
var j,ck=href.split("/").pop();
for (var i=0;i<6;i++){if (ck==ct[i]){j=i;}}
var bd=String(j);
document.getElementById('E1').value=bd;
document.forms.F1.submit();
return true;
}
window.onload = function() { var c="name1.html";
if (!supports_history_api()) {return;}
swapPhoto(c);
window.setTimeout(function() {
window.addEventListener("popstate", function(e) {e.preventDefault();
swapPhoto(location.pathname);
}, false);
}, 1);
}
В итоге возникает проблема: при использовании iframe навигация по сайту становится практически невозможной, в то время как при использовании компонента XMLHttpRequest с аналогичными обработчиками событий всё работает нормально. Буду признателен за объяснение причины указанной проблемы.