Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработчик изменения истории в браузере для iframe 
:(
    Опции темы
vadval15
Дата 7.8.2015, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.4.2011

Репутация: нет
Всего: нет



При нажатии ссылки её обработчик вставляет изображение в 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 &gt;</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 с аналогичными обработчиками событий всё работает нормально. Буду признателен за объяснение причины указанной проблемы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0369 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.