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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> iframe 
:(
    Опции темы
YahоО
Дата 9.11.2023, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



iframe бесконечен?


Пример - файл называется am.html :
Код

<!DOCTYPE html><html><head></head><body>
<iframe src="am.html" id="iframe" style="height:0;width:0"></iframe><br>
<script>

var d = 0;
if (window.top != window.self  && window.top == window.parent) {
  window.parent.postMessage(" my d= "+d++, "*");
}else if (window.top == window.self){
  window.addEventListener("message", function(event) {   
   document.body.innerHTML+= "top received: " + event.data+"<br>"
  });
}

</script></body></html>

По идее приведенный код должен выполниться один раз.
Но получается что проверка window.self  не срабатывает как задумано, и передачи не останавливаются, как его переделать? 
(вариант с одним и тем же файлом, не с двумя файлами)
PM MAIL   Вверх
Oldshelf
Дата 11.11.2023, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



IMHO, тут что-то не так с модификацией document'а. Из-за этого iframe постоянно пересоздаётся и получается этот эффект. Потому что если заменить нотификацию на alert:

Код

<!DOCTYPE html><html><head></head><body>
<iframe src="am.html" id="iframe" style="height:0;width:0"></iframe><br>
<script>
var d = 0;
if (window.top != window.self  && window.top == window.parent) {
  window.parent.postMessage(" my d= "+d++, "*");
}else if (window.top == window.self){
  window.addEventListener("message", function(event) {   
//   document.body.innerHTML+= "top received: " + event.data+"<br>"
   alert("top received: " + event.data+"<br>");
  });
}
</script></body></html>


- то всё заработает нормально.
PM MAIL WWW   Вверх
YahоО
Дата 12.11.2023, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если просто добавить alert не удаляя в комментарий innerHTML, то цикличность продолжается с замедлением на время нажатий "ОК" :
Код

<!DOCTYPE html><html><head></head><body>
<iframe src="am.html" id="iframe" style="height:0;width:0"></iframe><br>
<script>
var d = 0;
if (window.top != window.self  && window.top == window.parent) {
  window.parent.postMessage(" my d= "+d++, "*");
}else if (window.top == window.self){
  window.addEventListener("message", function(event) {   
   document.body.innerHTML+= "top received: " + event.data+"<br>";
   alert("top received: " + event.data);  
  });
}
</script></body></html>

и по прежнему проверка window.top == window.self не срабатывает так как ожидается, т.е. именно эта точка проявляет несовершенство и недоработку, и похоже это зависит не браузера, но от js.
Задачу конечно можно решить, но только прибегнув к помощи другого файла считающего количество загружаемых iframe, и тогда это будет называться костылем.

Добавлено через 4 минуты и 58 секунд
И можно решить проблему даже в одном файле:
Код

<!DOCTYPE html><html><head></head><body>
<iframe src="am.html" id="iframe" style="height:0;width:0"></iframe><br>
<div id="dd"></div>
<script>
var d = 0;
if (window.top != window.self  && window.top == window.parent) {
  window.parent.postMessage(" my d= "+d++, "*");
}else if (window.top == window.self){
  window.addEventListener("message", function(event) {
   dd.innerHTML+= "top received: " + event.data+"<br>"     
  });
}
</script></body></html>

без костыля.

Добавлено через 7 минут и 9 секунд
Oldshelf спасибо за подсказку, именно благодаря ей удалось найти решение.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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