Как правильно объединять виджеты "блок html".

#1 17 августа 2018 в 15:57
В видежете "html блок" у меян вставляется ява скрипт.

Если виджет висит отдельно, то всё прекрасно работает. Но как только я использую функцию "объеденить с предыдущим" когда создаются закладки в боковой панели, скрипт перестаёт работать.

Работает он только если правой кнопкой тыкнуть на место скрипта и нажать "перезагрузить фрейм".

При этом такая проблема наблюдается конкретно в хроме. В опере и лисе всё нормально.

Что может не нравится хрому, почему он не подгружает сразу скрипт js при объединении виджетов "блоков html" ?

Самая жесть что иногда очень редко скрипт успевает подрузиться… С рекламой в html блоках уже намучался, тоже загружается через раз. Может на сервере нажуно какие то настройки выставлять? НЕ могу понять в какую сторону копать совсем...

Зы… тех поддержки скриптов сказали что проблема в инстанте… В виджете "блок html", а в чём не известно…
#2 17 августа 2018 в 19:17
@demelkar, в инстанте нет проблемы, есть проблемы в браузерах. Например, нельзя получить ширину и высоту скрытого слоя (с помощью display: none;). Нельзя проскроллить вверх скрытый элемент.

Погуглите на тему "yandex map не работает в табах" и т.п.
Вот пример ru.stackoverflow.com/questions/671018/не-работает-функция-из-за-displaynone

Вам надо повесить обработчик на таб, чтобы при открытии таба запускался ваш скрипт.
#3 17 августа 2018 в 19:19
@demelkar, что-то типа

  1. $('#maptabs').on( "tabsactivate", function( event, ui ) {myMap$key.container.fitToViewport();
#4 17 августа 2018 в 19:49
А в каком файле этот таб прописан? :)


@demelkar, что-то типа

  1. $('#maptabs').on( "tabsactivate", function( event, ui ) {myMap$key.container.fitToViewport();

Zau4man
#5 17 августа 2018 в 20:20
@demelkar, я лишь привел пример для табов из jqueryul jqueryui.com/tabs/
Поглядел код двойки, в табах виджетов используется свой код из core.js

  1.  
  2. $('.widget_tabbed').each(function(){
  3.  
  4. $('.tabs .tab a', $(this)).click(function(){
  5. var wid = $(this).data('id');
  6. var block = $(this).parent('li').parent('ul').parent('.tabs').parent('.widget_tabbed');
  7. $('.body', block).hide();
  8. $('.links-wrap', block).hide();
  9. $('#widget-'+wid, block).show();
  10. $('#widget-links-'+wid, block).show();
  11. $('.tabs a', block).removeClass('active');
  12. $(this).addClass('active');
  13. return false;
  14. });
  15.  
  16. });
  17.  
Универсальное решение пока не приходит на ум...
Пока лишь вижу, что у ссылки в каждом табе есть атрибут data-id



От него надо плясать. Определить, в каком табе ваш скрипт, отследить клик по этому табу и запустить/перезапустить выполнение вашего скрипта.
#6 18 августа 2018 в 00:05
"display: none" там вроде нет нигде… Интересно что если вставлять просто в html блок всё работает. не работает именно при объединении виджетов. я не програмист, мне сложно понять что там с табами не так :(

Самое интересное что я вставил в блок другой скрипт виджета… И он точно так же глючит в Лисе (чаще всего не подгружается.) И… работает в хроме… Мой мозх сломался...

Табы очень нужны,… но не глючные :(
#7 18 августа 2018 в 12:18

"display: none" там вроде нет нигде...

@demelkar
строка
  1. $('.body', block).hide();
работает именно так. Добавляет к блоку свойство "display: none"

Самое интересное что я вставил в блок другой скрипт виджета..

@demelkar
еще раз! Не должны работать в скрытых слоях скрипты, которые зависят от ширины, высоты, видимости элемента и т.п. Так устроены браузеры. В погоне за оптимизацией они не считают в момент загрузки страницы ничего лишнего, и скрытое содержимое они считают лишним для вычисления всех их атрибутов, позиции и т.п.

Табы очень нужны,… но не глючные :(

@demelkar
Они не глючные. Просто услышьте меня :)

Можно попробовать переделать табы… Скрывать их не с помощью
  1. $('.body', block).hide();
а, скажем, с помощью добавления класса с position: absolute; margin-left: -9999px;
что также уберет элемент с экрана, но оставит его видимым.

Надо пробовать.
#8 18 августа 2018 в 12:26
Вот это будет в следующем релизе, поэтому можете внести себе эту правку. А дальше в своем яваскрипте проверять, на какой таб кликнули. Если на чужой таб, ничего не делать, если на ваш, то выполнить нужные действия — например перезагрузить фрейм или вывести его вообще.
#9 18 августа 2018 в 22:37


Вот это будет в следующем релизе, поэтому можете внести себе эту правку. А дальше в своем яваскрипте проверять, на какой таб кликнули. Если на чужой таб, ничего не делать, если на ваш, то выполнить нужные действия — например перезагрузить фрейм или вывести его вообще.

Loadырь

дело в том что скрипты не мои, они сторонние с поставщиками данных. Я их не могу изменить :(
#10 18 августа 2018 в 22:38
А без педелки табов, добавить что-нибудь чтоб при нажатии перезагружался фрейм можно ?


"display: none" там вроде нет нигде...

@demelkar
строка
  1. $('.body', block).hide();
работает именно так. Добавляет к блоку свойство "display: none"

Самое интересное что я вставил в блок другой скрипт виджета..

@demelkar
еще раз! Не должны работать в скрытых слоях скрипты, которые зависят от ширины, высоты, видимости элемента и т.п. Так устроены браузеры. В погоне за оптимизацией они не считают в момент загрузки страницы ничего лишнего, и скрытое содержимое они считают лишним для вычисления всех их атрибутов, позиции и т.п.

Табы очень нужны,… но не глючные :(

@demelkar
Они не глючные. Просто услышьте меня :)

Можно попробовать переделать табы… Скрывать их не с помощью
  1. $('.body', block).hide();
а, скажем, с помощью добавления класса с position: absolute; margin-left: -9999px;
что также уберет элемент с экрана, но оставит его видимым.

Надо пробовать.

Zau4man
#11 21 августа 2018 в 14:02
"icms.events.run('icms_tab_cliked', this);"

Что прописать там нужно чтобы при клике на таб, фрейм его перехагружался автоматом ?

Я попытался что-то написать… в итоге меня на одном источнике данных чёт забанили какую то атаку :))))))
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.