Пожалуйста регайтесь под своим ником на смотришке или укажите ссылку на профиль в аккаунте
Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Последние темы
Декабрь 2017
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031

Календарь Календарь

Вход

Забыли пароль?


Разработка и тестирование

Страница 1 из 4 1, 2, 3, 4  Следующий

Предыдущая тема Следующая тема Перейти вниз

Разработка и тестирование

Сообщение автор ЭфедроШка в Сб Май 25, 2013 10:29 am

Только для разработчиков!!!



Здесь выкладывает, скрипты, патчи, фиксы, с готовым решением



Последний раз редактировалось: ЭфедроШка (Сб Май 25, 2013 8:51 pm), всего редактировалось 3 раз(а)
avatar
ЭфедроШка
Арт-директор

Сообщения : 131
Дата регистрации : 2012-11-29
Откуда : Куба

http://qip.ru/

Вернуться к началу Перейти вниз

Фиксим скрипт ЧатФильтр...

Сообщение автор max30 в Сб Май 25, 2013 11:19 am

Фиксим подгрузку скрипта ЧатФильтр после ввода пароля. Теперь работает автоматом, без кликов и доп. эл-тов DOM..

.. вырезали
Код:
============================CUTE================================
if (!document.getElementById("chat_msg_form_place")) {
    document.getElementsByTagName("span")["BroChatDragger"].appendChild(
loadIn = create("a", {
    id: 'loadIn', onclick:'loadFilter();', style: 'float: left; font-weight: bold; cursor: pointer; font-size: 12px;'}, "Подгрузить Chat-Filter"));
}
============================CUTE================================

.. вставили
Код:
===========================PASTE================================
if (!document.getElementById("main_chat")) {
  // первый дочерний эл-т чата
  var timer = setInterval( function() {
                    if (!document.getElementById("main_chat")) {  ; 
                        console.log('No chat(');
                        // зарезервировали для анимации
                    } else {
                        loadFilter();
                        clearInterval(timer); // убили таймер
                        console.log('Hello chat!');
                    }
                } , 1000);


} // end if
===========================PASTE================================

.. вырезали
Код:
============================CUTE================================
      loadIn.parentNode.removeChild(loadIn);
============================CUTE================================

.. вставили
Код:
===========================PASTE================================
      // loadIn.parentNode.removeChild(loadIn); // или просто затерли
===========================PASTE================================

продолжение следует...
пост продублирован..


Последний раз редактировалось: max30 (Сб Май 25, 2013 11:25 am), всего редактировалось 1 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Фиксим скрипт Декоратор... аналогично...

Сообщение автор max30 в Сб Май 25, 2013 11:20 am

Фиксим подгрузку скрипта Декоратор после ввода пароля. Теперь работает автоматом, без кликов и доп. эл-тов DOM..

.. вырезали
Код:
============================CUTE================================
if (!document.getElementById("chat_msg_form_place")) {
    document.getElementsByTagName("span")["BroChatDragger"].appendChild(
loadInDec = create("a", {
    id: 'loadInDec', onclick:'loadDec();', style: 'float: left; font-weight: bold; cursor: pointer; font-size: 12px;'}, "Подгрузить Decorator "));
}
============================CUTE================================

.. вставили
Код:
===========================PASTE================================
if (!document.getElementById("main_chat")) {
  // первый дочерний эл-т чата
  var fixer = setInterval( function() {
                    if (!document.getElementById("main_chat")) {  ; 
                        console.log('No chat(');
                        // зарезервировали для анимации
                    } else {
                        loadDec();                                                           
                        clearInterval(fixer); // убили таймер
                        console.log('Hello chat!');
                    }
                } , 1000);


} // end if
===========================PASTE================================

.. вырезали
Код:
============================CUTE================================
      // loadInDec.parentNode.removeChild(loadInDec); 
============================CUTE================================

.. вставили
Код:
===========================PASTE================================
      // loadInDec.parentNode.removeChild(loadInDec); // или просто затерли
===========================PASTE================================

продолжение следует...

пост продублирован..


Последний раз редактировалось: max30 (Вт Май 28, 2013 3:39 am), всего редактировалось 1 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Сталоне в Вс Май 26, 2013 9:54 pm

У себя сделал через ивенты.

Как то так:

Код:

   if (document.getElementById('ChatFilterBase')) {
      InitSavedVariables();
      InitControlMenu();
   }

   function InitChatFilter(){
      var div_chat_block = document.getElementById('chat_block');

      if (document.getElementById('main_chat')){ //creating Chat Filter elements on page
         if (div_chat_block.removeEventListener) div_chat_block.removeEventListener('DOMSubtreeModified', InitChatFilter, false);

         if (!(document.getElementById('ChatFilterBase'))){
            document.getElementById('chat_block').appendChild(create( "div", { id: "ChatFilterBase"},
            create( "div", { id:'ChFMenu_div', class:'ChFMainElements', onclick:"ChatFilterMenu(); return false;", title: "Настройки"},'ChatFilter:'),
            create( "div", { id:'ChFOnOff_div', class:'ChFMainElements OnOffMark_Off'},'OFF'),
            create( "div", { id:'ChFBtn_div', class:'ChFMainElements'},
            create("input", {id:'BtnOnOff', type:'button', onclick: "OnOffFilter(); return false;", value:'Вкл'}))));

            InitSavedVariables();
            InitControlMenu();
         }
      }
   }

   if (document.getElementById('chat_block')){document.getElementById('chat_block').addEventListener('DOMSubtreeModified', InitChatFilter,false);}

avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

межбраузерная поддержка скрипта...

Сообщение автор max30 в Пн Май 27, 2013 11:56 am

max30 пишет:
Сталоне пишет:У себя сделал через ивенты.
...........................
Фишка в том, что Опера это событие НЕ поддерживает... У меня была попытка подобное реализовать, но позже отказался ввиду указанной причины... спецификация DRAFT - черновик или пробное решение, с далекими перспективами и претензиями на стандарт...
The problem is that Opera doesn't support the js event "DOMSubtreeModified".
Мы стараемя добиться универсального кода, хотя бы для ЛИСЫ+ХРОМ+ОПЕРА. С событиями надо вообще осторожно, громоздкие фреймворки решают эту проблему, но нам это не подходит..
Поэтому ищем ОБЩЕЕ решение и БЕЗ сторонних библиотек....
Интересная ссылка про браузеры [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Сталоне в Вт Май 28, 2013 11:31 pm

max30 пишет:
max30 пишет:
Сталоне пишет:У себя сделал через ивенты.
...........................
Фишка в том, что Опера это событие НЕ поддерживает... У меня была попытка подобное реализовать, но позже отказался ввиду указанной причины... спецификация DRAFT - черновик или пробное решение, с далекими перспективами и претензиями на стандарт...
The problem is that Opera doesn't support the js event "DOMSubtreeModified".
Мы стараемя добиться универсального кода, хотя бы для ЛИСЫ+ХРОМ+ОПЕРА. С событиями надо вообще осторожно, громоздкие фреймворки решают эту проблему, но нам это не подходит..
Поэтому ищем ОБЩЕЕ решение и БЕЗ сторонних библиотек....
Интересная ссылка про браузеры [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]

Справедливо ... В фаерфоксе , в консоли уже пишет что это Deprecated



запилил себе , работает как надо
avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

Ловим глюки Скриптов

Сообщение автор max30 в Вт Июн 18, 2013 9:27 pm

Нашел уже несколько версий ЧатФильтра) Кто у кого копирует, не понятно. Причем, копируют с теми же ошибками)
Эксперимент №1 - зайди, например, на поисковик Гоогл и сохрани страницу. Теперь посмотрим что сохранилось - скрипт подгружен и сюда.
Эксперимепт №2 - зайди на любой хост смотришки и сохрани страницу. Смотрим - скрипт частично загружен во фреймах... и грузится на абсолютно всех страницах..
Про найденное...............
Первая версия - в разделе таблетки, оригинальная версия.
Еще - [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
Eще - [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
Еще - версия от сталоне....
--------------------------------------------------------------------------------------------------------
Оригинальная версия
--------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name ChatFilter
// @description Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version 1.0
// @include * <======================= директива грузит на всех страницах
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку] <======================= опечаткО
// @run onload <======================= мифическое значение
// ==/UserScript==
--------------------------------------------------------------------------------------------------------
У остальных
--------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name ChatFilter
// @description Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version 1.x
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку] <======================= опечаткО
// @run onload <======================= мифическое значение
// ==/UserScript==
--------------------------------------------------------------------------------------------------------
Версия от Сталоне
--------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name ChatFilter
// @description Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version 1.x
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку] <======================= опечаткО
// @run onload <======================= мифическое значение
// ==/UserScript==
// ниже полный абсурд - условие не выполнимо никогда <============= мифическое условие
if (location.hostname !== "smotri.com" && location.hostname !== "video.qip.ru" && location.hostname !== "vidin.ru") // Защита от выполнения на страницах в других доменах
return;
--------------------------------------------------------------------------------------------------------
Про директивы читаем тут
--------------------------------------------------------------------------------------------------------

" Supports two values: document-end and document-start. "
[Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
И тут
[Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]

--------------------------------------------------------------------------------------------------------
В итоге, более-менее корректное начало скрипта должно выглядеть так:
--------------------------------------------------------------------------------------------------------

************************************************************************************
// ==UserScript==
// @name        ChatFilter
// @description Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version     1.x
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include     [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @run-at      document-start <======================= ВНИМАНИЕ! правильная директива
// ==/UserScript==


// FIX[0]
// уходим со страницы по условию (для ХРОМ)
if ( document.location.href.indexOf("/live/") < 0 ) {
    return;
}


// FIX[1]
// не запускаем скрипт во фреймах
// без этого условия скрипт будет запускаться несколько раз на странице с фреймами (на смотришке 6
// фреймов - так синхронизируется АПИ  на всех доменах + реклама)
if (window.self != window.top) {
    return;
}


// FIX[2]
// не позволяем грузиться на иных страницах (можно еще раз проверить на уникальность тегов)
if (!document.getElementById('chat_block')) {
    return;
}

function Createfunc( name, attributes ) {
// stuff
}
************************************************************************************
Резюме: скрипт дает знать о себе на абсолютно любых сайтах и(или) во фреймах. Это частично ответ и про куки))) Если разработчики хотели зарезервировать пространство для ЗАПРОСОВ (например, для чат-бота) таким образом, то это делается не так(((
В НЫНЕШНЕЙ РЕАЛИЗАЦИИ ЧАТФИЛЬТРА ЕСТЬ ДЫРА ДЛЯ ЗЛОУМЫШЛЕННИКА! ПОДРОБНОСТИ РАСКРЫВАТЬ НЕ БУДУ..


Последний раз редактировалось: max30 (Ср Июн 19, 2013 8:58 pm), всего редактировалось 4 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Сталоне в Ср Июн 19, 2013 6:33 am

// ==UserScript==
// @name ChatFilter
// @description (DevVersion) Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version 1.2
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @match [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @match [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @include [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @match [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
// @run onload
// ==/UserScript==

У меня по другому , только 2 зеркала  vidin.ru video.qip.ru и smotri.com
То что ты там написал не кусок моей версии скрипта ...

Вобщем то если кому то не нравится что копируют их скрипты можно распространять с лицензией ... Как делают в остальном цивилизованом мире.
Можно определиться для себя это opensource проект или ещё что то ...


Последний раз редактировалось: Сталоне (Ср Июн 19, 2013 6:49 am), всего редактировалось 1 раз(а)
avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Сталоне в Ср Июн 19, 2013 6:43 am

Код:
// ниже полный абсурд - условие не выполнимо никогда <============= мифическое условие
if (location.hostname !== "smotri.com" && location.hostname !== "video.qip.ru" && location.hostname !== "vidin.ru") // Защита от выполнения на страницах в других доменах
return;



А ты просто вставь alert в код после этого куска кода и зайти на video.qip.ru,  smotri.com и  vidin.ru , а потом зайди на любые  другие сайты и посмотри где вылезет алерт ...

Насчёт деректив run действительно до конца не понимаю как они работают , надо почитать ... Оно присутствовало в коде уже давненько и никак не мешало.


Код:
FIX[1]
// не запускаем скрипт во фреймах
// без этого условия скрипт будет запускаться несколько раз на странице с фреймами (на смотришке 6
// фреймов - так синхронизируется АПИ  на всех доменах + реклама)
if (window.self != window.top) {
    return;
}
Учтём ...


Код:
// FIX[2]
// не позволяем грузиться на иных страницах (можно еще раз проверить на уникальность тегов)
if (!document.getElementById('chat_block')) {
    return;
}
Это вообще непонятно как ограничивает выполнение скрипта на уровне доменов ...
avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

ФИКСЫ

Сообщение автор max30 в Ср Июн 19, 2013 7:34 am

ТЫ ПРОЧИТАЙ ВСЕ И ОБДУМАЙ. ОГРАНИЧЕНИЕ ПО ТЭГУ И ДОМЕНЫ - СКРИПТ ДОХОДИТ ДО ЭТОГО УСЛОВИЯ И УХОДИТ С ДОМЕНА, НЕ ОСТАВЛЯЯ СЛЕДОВ И НЕ ПОДГРУЖАЯ БОЛЕЕ НИЧЕГО.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Смотрим ТОП трансляции без тормозов

Сообщение автор max30 в Чт Июн 20, 2013 12:30 am

Почему "тормозит" страница с трансляцией, особенно это чувствительно в ТОПовых трансляциях? Потому, что все "ВИТРИНЫ" смотришки обновляются по технологии КОММИТОВ. Что это - во фреймы циклически на страницу по таймеру подгружается контент на все зеркала из разных источников.
Решаем проблему только на СТРАНИЦЕ с трансляцией(чтобы не раздражать администрацию=)). Дополнительно очистка банеров вокруг плеера (НАД-ПОД-СПРАВА  от чата). Итог - страница "стоит" без подгрузки как картинка.
Ниже ПРОВЕРЕННЫЙ код с комментариями.
спойлер:

// блок переменных
var banner, timerID,
     frame = document.getElementsByTagName('iframe');

// наша вспомогательная рекурсивная ф-ия
// вопрос: зачем, если, есть - setInterval
// ответ: setInterval - не выдерживает тайминги и грузит браузер
// поэтому наша функция-замыкание иммитирует setInterval
// и выдерживает тайминги и не грузит браузер
// вопрос: почему время 2,5 сек
// ответ: потому, что некоторые фреймы обновляются через 5 сек(до 30 сек)
function fuckFrame(el) {
    if (!el){return;}; // не хлопаем ушами
    var i, timeout = 2500; // таймаут, ms.
    // старт замыкания
    timerID = setTimeout(function run() {         
       // число фреймов ДО
       // alert(el.length);
       // вызов нечто
       for (i=0; i < el.length; i++)
           if (el[i]){el[i].parentNode.removeChild(el[i])};
       // число фреймов ПОСЛЕ
       // alert(el.length);           
       // вызов рекурсивно
       timerID = setTimeout(run, timeout);        
    },
    timeout); // тайминг тут   
}

// мы на странице с трансляцией
if (document.getElementById('chat_block')) {

   // убили фреймы   
   fuckFrame(frame);

   // убили баннеры   
   banner = document.getElementById('BannerUnderBroChat');
   if (banner) { banner.parentNode.removeChild(banner); }

   banner = document.getElementById('BannerUnderBroPlayer');
   if (banner) { banner.parentNode.removeChild(banner); }

   banner = document.getElementById('banner-header-bottom');
   if (banner) { banner.parentNode.removeChild(banner); }
     
   banner = document.getElementById('banner-header-top');
   if (banner) { banner.parentNode.removeChild(banner); }

   banner = document.getElementById('vk_groups');
   if (banner) { banner.parentNode.removeChild(banner); }

   banner = document.getElementById('popup_loading_right_gamers');
   if (banner) { banner.parentNode.removeChild(banner); }

   banner = document.getElementById('koth_right_gamers_list');
   if (banner) { banner.parentNode.removeChild(banner); }

}

Этот код достаточно поместить в первую часть скрипта ЧатФильтр.
Из минусов - убивается верхний фрейм с кнопкой выхода из аккаунта. Но можно, при желании этот код повесить на свою кнопку ВКЛ/ОТКЛ.


Последний раз редактировалось: max30 (Пт Сен 12, 2014 2:08 pm), всего редактировалось 5 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Сталоне в Чт Июн 20, 2013 3:53 am

ТЫ ПРОЧИТАЙ ВСЕ И ОБДУМАЙ. ОГРАНИЧЕНИЕ ПО ТЭГУ И ДОМЕНЫ - СКРИПТ ДОХОДИТ ДО ЭТОГО УСЛОВИЯ И УХОДИТ С ДОМЕНА, НЕ ОСТАВЛЯЯ СЛЕДОВ И НЕ ПОДГРУЖАЯ БОЛЕЕ НИЧЕГО.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
================================================

Код:
// FIX[2]
// не позволяем грузиться на иных страницах (можно еще раз проверить на уникальность тегов)
if (!document.getElementById('chat_block')) {
return;
}

ПО ПОВОДУ ЭТОГО КУСКА КОДА ИЗ ТВОЕГО СООБЩЕНИЯ  - МНЕ БОЛЬШЕ МОЙ ПОДХОД НАРАВИТСЯ - ДАЁТ ВЫПОЛНЯТСЯ ТОЛЬКО НА РАЗРЕШЁННЫХ 3 ДОМЕНАХ ... НА ОСТАЛЬНЫХ ЗАВЕРШАЕТСЯ СРАЗУ + ДЕРЕКТИВЫ В ОСТАЛЬНЫХ БРАУЗЕРАХ РАБОТАЮТ НОРМАЛЬНО.


Последний раз редактировалось: Сталоне (Чт Июн 20, 2013 6:05 am), всего редактировалось 2 раз(а)
avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

опять...

Сообщение автор max30 в Чт Июн 20, 2013 4:22 am

=первый эксперимент=
===========================
зайди на любую страницу и сохрани ее. теперь посмотри что там. а там ты увидиш и подгруженный скрипт "ака файл ChatFilterAPI.js" и во фреймы загляни - они сохраняются как html - там увидиш фрагменты скрипта, которые успели подгрузинуться..(чаще всего там успевает прописаться тэг audio из чатфильтра, бывает и другие)

=или второй эксперимент=
==========================
if (location.hostname !== "smotri.com" && location.hostname !== "video.qip.ru" && location.hostname !== "vidin.ru")
// Защита от выполнения на страницах в других доменах
return;
// это добавь после своей конструкции
var frame = document.getElementsByTagName('iframe');
// тут лови ку-ку - если поймал - было обращение к фрейму с попыткой загрузки в него скрипта
if (frame.length > 0 ){alert("ку-ку, я фрейм!")};

=========================
я ничего не навязываю, пусть у тебя будет твое решение) вопрос закрыт.
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Мелкий фикс чатфильтра..

Сообщение автор max30 в Чт Июн 20, 2013 5:09 am

Фиксим функцию, которая разбивает текст в чате на 2 части.
Фиксим в том плане, что она грубо режет по 199-му(отсчитанного от нуля) символу сообщение и получается, что чаще всего СЛОВО  разорвано и нечитаемо . Мы исправим это и будем резать по ближайшему пробелу слева от 199-го символа.
спойлер:

===========================CUTE=============================
function twoHundred() {
    var chatText = doc.getById("chat_text");
    if (chatText.value.length > 200) {
            testBox = chatText.value.substr(199);
            if (!dontShow) {
                doubleMessage.style.display = 'block';
                chatText.style.borderBottom = '1px solid #FFFBDF';
            }
===========================CUTE=============================
 и......
==========================PASTE=============================
function twoHundred() {
    var chatText = doc.getById("chat_text"), lastSpace ;
    if (chatText.value.length > 200) {
          // FIX[1] поиск первого пробела в строке слева от 199 символа
          // условие lastIndexOf(" ", 199) > 0) - не брать пробел после ника и
          // тернарный оператор - защита от флема (длинный посыл без пробелов)
          lastSpace=((chatText.value.lastIndexOf(" ", 199) > 0) ? chatText.value.lastIndexOf(" ", 199) : 199);
          // testBox = chatText.value.substr(199);
          // FIX[2] тут аргумент, как номер последнего символа по пробелу
          testBox = chatText.value.substr(testBox);
          if (!dontShow) {
              doubleMessage.style.display = 'block';
              chatText.style.borderBottom = '1px solid #FFFBDF';
          }
==========================PASTE=============================
пробуем...


Последний раз редактировалось: max30 (Пт Сен 12, 2014 2:10 pm), всего редактировалось 3 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

фиксы

Сообщение автор Сталоне в Чт Июн 20, 2013 5:52 am

if (window.self != window.top) {
return;
}

По поводу этого кода выше - согласен , нужен ... Проверил без банерорезалок  и без прокси, на чистом браузере , действительно скрипт подгружается на какой то iFrame во второй раз...

Но вот этот код ниже - не самый лучший пример , он показывает лишь количество элементов с тегом iframe на странице и отрабатывает один раз.

var frame = document.getElementsByTagName('iframe');
if (frame.length > 0 ){alert("ку-ку, я фрейм!")};
=======================================================
avatar
Сталоне

Сообщения : 148
Дата регистрации : 2013-01-23
Откуда : оттуда

Вернуться к началу Перейти вниз

еще пример

Сообщение автор max30 в Чт Июн 20, 2013 6:03 am

// вот более подробно и убедительно - ведь событие onload выполняется один раз
var frame = document.getElementsByTagName('iframe');
// тут ку-ку из всей коллекции в цикле со своим номером фрейма
for (var i=0; i < frame.length; i++)
   if (frame[i]){alert("ку-ку, я фрейм № " + i)};
То есть, мы не позволяем грузить(по моему примеру после директив) скрипт во фрейм(Ы), но после загрузки, фреймы живут своей жизнью.
В данном случае мы управляем только загрузкой скрипта...
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Че тут? Или смотрим скрипт Декоратор..

Сообщение автор max30 в Вс Июн 23, 2013 10:22 pm

Разный формат аудио:
спойлер:

Код:

        if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1){
            if(oAudio.src != 'http://dl.dropbox.com/u/52549691/sal.mp3') oAudio.src = 'http://dl.dropbox.com/u/52549691/sal.mp3';
        }else if(navigator.userAgent.toLowerCase().indexOf('opera') > -1){
            if(oAudio.src != 'http://dl.dropbox.com/u/52549691/sal.wav') oAudio.src = 'http://dl.dropbox.com/u/52549691/sal.wav';
        }else if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1){
            if(oAudio.src != 'http://dl.dropbox.com/u/52549691/sal.wav') oAudio.src = 'http://dl.dropbox.com/u/52549691/sal.wav';
        }
Кроме того, что один файл лежит в трех форматах, конструкции if-else if сильно замедляют выполнение (самая медленная конструкция среди всех возможных "по условию").
Справочно:

Для тройки браузеров подходит WAV и OGG. Целесообразно использовать OGG (меньший размер файла).


Последний раз редактировалось: max30 (Ср Сен 17, 2014 8:51 am), всего редактировалось 2 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Че тут? Или смотрим скрипт ЧатФильтр..

Сообщение автор max30 в Ср Апр 02, 2014 12:29 am

Подробно посмотрел код ЧатФильтра. Ох и накалбасили разработчики с фрагментом формирования цветного ника. Десятки регулярных выражений и условий(if) и несколько функций.

Тоже самое можно решить одной функцией, главный посыл - зачем искать ссылку регуляркой, если найти ссылку проще и быстрее через  DOM функции.
Пример функции, которая решит эту задачу быстро и просто:
спойлер:

Код:

// дополнительная Функция - входной параметр - текст(строка сообщения с ником)
function findLink(html) {
// блок переменных
var i, links,
// сделали мифический блок чтобы работали DOM функции
tmp = document.createElement("DIV");

// входные данные - текст
tmp.innerHTML = html;
 
// нашли ссылки и заменили на цветные ники
links=tmp.getElementsByTagName("A");  
if (links.length > 0) {
    i=links.length;  
    while(i--) {
       // тут добавить условия замены ника ВЛАДЕЛЬЦА(кроме профиля
       // может быть ссылка на видео или трансляцию)
       if (links[i].className == 'Nick')
       // тут замена на цветной ник из обьекта-функции
       links[i].innerHTML='Я ЦВЕТНОЙ НИК!';
       // тут добавить условия замены ника В СООБЩЕНИИ
       if (links[i].className == 'MakeLink')
       // тут замена на цветной ник из обьекта-функции
       links[i].innerHTML='Я ЦВЕТНОЙ НИК В СООБЩЕНИИ!';  
    } // end loop
} // end if

// тут зачистить тег DIV через RE
// ...
// вернули уже с цветными никами или без изменения
return tmp;
}
Добавить 2 условия и функция готова.


Последний раз редактировалось: max30 (Пт Сен 12, 2014 2:12 pm), всего редактировалось 1 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор max30 в Вс Апр 20, 2014 1:36 pm


Выпилить[Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]...

dream74 пишет:...
Чатфильтр: [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]

Смотрим код Декоратора:
спойлер:

p.s. Гриб, занялся бы делом, чем эфир засорять

grib пишет:

...
Все, что я здесь пишу ..., имеет вполне определенную ценность.
    мегаценность или записки сумашедшего спамера   


И так по теме...
Смотрим код(эта область юзерскрипта называется - метаданные):

Код:

// ==UserScript==
// @name        ChatFilter
// @description Allow user to create ignore and white lists and add Autopilot bot for manage of broadcast
// @version     1.0
// @include *
// @include     http://smotri.com/live/*
// @include     http://video.gdate.ru/live/*
// @include     http://video.passion.ru/live/*
// @include     http://video.qip.ru/live/*
// @include     http://video.comedy.ru/live/*
// @include     http://vidin.rulive/*
// @run        onload
// ==/UserScript==

Смотрим строку
Код:

// @include *

Эта директива означает, что скрипт будет выполняться ВЕЗДЕ -  по любому адресу.
Чем это грозит юзеру - за короткое время кеш браузера будет забит.
Как это увидеть - заходим на любую страницу, кроме смотришки и сохраняем страницу. Смотрим содержимое - там будет Ваш скрипт...

Смотрим далее метаданные
Код:

// @include     http://smotri.com/live/*
// @include     http://video.gdate.ru/live/*
// @include     http://video.passion.ru/live/*
// @include     http://video.qip.ru/live/*
// @include     http://video.comedy.ru/live/*
// @include     http://vidin.rulive/*

Это директивы ИСКЛЮЧИТЕЛЬНО для браузера ФФ. Где директивы для других браузеров7 Где директивы для других зеркал, учитывая, что предыдущую директиву придется удалить7

Сморим далее
Код:

// @run        onload
Такой директивы не существует...

Можно сказать - но ведь работает ведь все. Да, работает, до определенного времени, например до обновления мартышек или браузера...

Опять грабли...

Как не наступать на грабли(рекомендуется читать код юзерскрипта с комментариями), ссылка
[Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]

В топике у Сталоне можно почитать диалоги на эту тему.
И кое-что тут
[Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]


Последний раз редактировалось: max30 (Ср Сен 17, 2014 9:10 am), всего редактировалось 5 раз(а)
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор max30 в Ср Сен 17, 2014 9:08 am

Смотрим код декоратора.

Большой размер JS файла:
спойлер:

Код:

 if(MsgText.indexOf('*brat18*')!= -1 && !OnSound){
        var oAudio = document.getElementById('myaudio');
        oAudio.src = 'http://dream74.trickweb.ru/Sounds/Brat/brat18.ogg';
        playAudio();
        OnSound = true;
    }
 if(MsgText.indexOf('*brat19*')!= -1 && !OnSound){
        var oAudio = document.getElementById('myaudio');
        oAudio.src = 'http://dream74.trickweb.ru/Sounds/Brat/brat19.ogg';
        playAudio();
        OnSound = true;
    }
 if(MsgText.indexOf('*brat20*')!= -1 && !OnSound){
        var oAudio = document.getElementById('myaudio');
        oAudio.src = 'http://dream74.trickweb.ru/Sounds/Brat/brat20.ogg';
        playAudio();
        OnSound = true;

Интересна эта строка(многочисленные повторы кода):
Код:

        var oAudio = document.getElementById('myaudio');

В самом конце файла набор функций, сокращающий код:
Код:

function getid(id) {
    return document.getElementById(id);
}

Применяем ее и сокращаем код (размер файла). В редакторе можно применить пакетную замену.
Кроме того много конструкций if (самая медленная конструкция). При множественных условиях целесообразно применить конструкцию case (самая быстрая по скорости).

Про переменные и время выполнения:
спойлер:

Код:

var floatimages = new Array();
floatimages[0] = 'http://dream74.trickweb.ru/Images/1.gif';
floatimages[1] = 'http://dream74.trickweb.ru/Images/2.gif';
floatimages[2] = 'http://dream74.trickweb.ru/Images/3.gif';
Если в JS имя переменной(функции или обьекта) содержит более 7 символов, то под нее отводится уже 2 байта и так далее.

Оптимизируем раз:
спойлер:

Находим функцию:
Код:

function VarInit(){

    SoundOn = true;
    ...
    if(document.getElementById('myaudio')){

        removeElement('myaudio');

    }
    ...
}

Функция removeElement уже проверила наличие элемента внутри своего кода. Лишнее прогон по DOM, а это падение скорости.
Достаточно так:
Код:

function VarInit(){

    SoundOn = true;
    ...
        removeElement('myaudio');
    ...
}

Оптимизируем два:
спойлер:

Код:

 if(MsgText.indexOf('*brat18*')!= -1 && !OnSound){
        var oAudio = document.getElementById('myaudio');
        oAudio.src = 'http://dream74.trickweb.ru/Sounds/Brat/brat18.ogg';
        playAudio();
        OnSound = true;
    }
 if(MsgText.indexOf('*brat19*')!= -1 && !OnSound){
        var oAudio = document.getElementById('myaudio');
        oAudio.src = 'http://dream74.trickweb.ru/Sounds/Brat/brat19.ogg';
        playAudio();
        OnSound = true;
    }
Эта портянка очень большая и добавляет всегда новую переменную var oAudio, а код  document.getElementById('myaudio') бесконечно "обходит" DOM  страницы (которая самая тяжелая на смотришке)...
Добавим маленькую ф-ию и избавимся от этих багов:
Код:

function setAudioSrc(s) {
    // глобальная перенная в блоке переменных
    if(!oAudio){
    oAudio=document.getElementById('myaudio');
 }
 return oAudio.src=s;
} // end of function


Теперь верхний фрагмент кода выглядит так:
Код:

if(MsgText.indexOf('*brat18*')!= -1 && !OnSound){
        // наша ф-ия
        setAudioSrc('http://dream74.trickweb.ru/Sounds/Brat/brat18.ogg');
        playAudio();
        OnSound = true;
}
...
Избавились от багов, описаных выше и уменьшили код..



Оптимизируем три:
спойлер:

Логическая организация и сокращение кода:
Код:

///////////////////////////////////////////
// код дабавить в начало в блок переменных
// переменные (если имя переменной не уложилось в 7 символов,
// надо уложиться тогда в 15 символов)
///////////////////////////////////////////
// хост
var dir_dream74="http://dream74.trickweb.ru/";
// папки
var dir_hero_of_animated_films=dir_dream74+"Animation/hero_of_animated_films/";
var dir_dances=dir_dream74+"Animation/dances/";
var dir_men=dir_dream74+"Animation/men/";
var dir_women=dir_dream74+"Animation/women/";
var dir_love=dir_dream74+"Animation/love/";
var dir_new_year=dir_dream74+"Animation/New_year/";
// продолжить аналогично
var dir_images=dir_dream74+"Images/";
// продолжить аналогично (ниже внимательно смотрим)
var dir_sounds=dir_dream74+"Sounds/";
var dir_12stulev=dir_sounds+"Dvenadtsat_stulev/";
// все конструкции продолжить до (не включая) имени файла  
var dir_bla_bla_bla_bla=dir_dream74+"bla_bla_bla_bla/";
Далее применяем переменные во всем коде, теперь к переменной добавляется только имя файла.

Еще:
Код:

    oAudio.src = 'http://dream74.trickweb.ru/Sounds/Dvenadtsat_stulev/dvst'+perB+'.ogg';
Не проще обозвать папку - 12_stulev.


Оптимизируем четыре:
спойлер:

Смотрим код (даны примечания к коду). Ф-я оптимизировала код и скорость выполнения.
Код:

function createSoundsAdd1(){
 
 for (i=1; i<14; i++){
 document.getElementById('SoundsSelect'+i).style.fontSize = '13px'; // 1-ый обход DOM
 document.getElementById('SoundsSelect'+i).style.color = '#0E859F'; // 2-ой обход DOM
 if (document.getElementById('SoundsBaseAdd'+i) && i!=1)document.getElementById('SoundsBaseAdd'+i).style.display = 'none'; // 2-ва обхода DOM
 }
 
 document.getElementById('SoundsSelect1').style.fontSize = '14px'; // 1-ый обход DOM
 document.getElementById('SoundsSelect1').style.color = 'Fuchsia'; // 2-ой обход DOM
 
 if(!(document.getElementById('SoundsBaseAdd1'))){
 document.getElementById('Sounds_content_div').appendChild(create( "div", { id: 'SoundsBaseAdd1', class: 'sounds_base'}));
 for(i=1; i<sound_list.length; i++){
 // 3-ри обхода DOM
 document.getElementById('SoundsBaseAdd1').appendChild(create("div", {id: 'sounds_div'+i, class: 'sounds_base_div', onclick: "insert_smile('chat_text', ' *" + sound_list[i]+ "* ', 'smiles_popup'); return false;"})).innerHTML = '*'+sound_list[i]+'*';
 document.getElementById('SoundsBaseAdd1').appendChild(create("audio", {src: sound_list_src[i], id: "sound_list_srcA"+i}));
 document.getElementById('sound_list_srcA'+ i).volume = 0.6;
 document.getElementById('SoundsBaseAdd1').appendChild(create("div", {class: 'input_sounds', onclick: "document.getElementById('sound_list_srcA" + i + "').play()"}, "\u266B"));
 }
 }else{
        document.getElementById('SoundsBaseAdd1').style.display = 'block';
    }
}

Теперь оптимизируем саму ф-ю:
Код:

function createSoundsAdd1(){
 for (i=1; i<14; i++){
    // было 2 обхода DOM -> теперь 1 обход (за 1 проход цикла)
    var sndSel=document.getElementById('SoundsSelect'+i);
    // было 2 обхода DOM -> теперь 1 обход (за 1 проход цикла)
    var sndBaseAdd=document.getElementById('SoundsBaseAdd'+i);
 sndSel.style.fontSize = '13px';
 sndSel.style.color = '#0E859F';
 if (sndBaseAdd && i!=1) sndBaseAdd.style.display = 'none';
 }
 
 // было 2 обхода DOM -> теперь 1 обход
 var sndSel1=document.getElementById('SoundsSelect1');
 sndSel1.style.fontSize = '14px';
 sndSel1.style.color = 'Fuchsia';
 
 // было 3 обхода DOM -> теперь 1 обход (за 1 проход цикла)
 var sndBaseAdd1=document.getElementById('SoundsBaseAdd1');
 if(!sndBaseAdd1){
 document.getElementById('Sounds_content_div').appendChild(create( "div", { id: 'SoundsBaseAdd1', class: 'sounds_base'}));
 for(i=1; i<sound_list.length; i++){
 sndBaseAdd1.appendChild(create("div", {id: 'sounds_div'+i, class: 'sounds_base_div', onclick: "insert_smile('chat_text', ' *" + sound_list[i]+ "* ', 'smiles_popup'); return false;"})).innerHTML = '*'+sound_list[i]+'*';
 sndBaseAdd1.appendChild(create("audio", {src: sound_list_src[i], id: "sound_list_srcA"+i}));
 document.getElementById('sound_list_srcA'+ i).volume = 0.6;
 sndBaseAdd1.appendChild(create("div", {class: 'input_sounds', onclick: "document.getElementById('sound_list_srcA" + i + "').play()"}, "\u266B"));
 }
 }else{
        sndBaseAdd1.style.display = 'block';
    }
}
Итого плюсы:
- уменьшили проходы по DOM (увеличили скорость выполнения);
- уменьшили код;
Итого плюсы:
- добавили несколько переменных (не существенно).
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор dream74 в Ср Сен 17, 2014 6:31 pm

max30 пишет:Смотрим код декоратора.
по 4-му пункту согласен, 2-ой и 3-й, вчера по другому сделал, посмотри (и выше так же будет)
Код:
var sTemp = false;
   var sMsgText = MsgText.match(/\*+[a-z0-9]+\*/g);
   var sI=0;
   while (sI < sMsgText.length) {
        if (sMsgText[sI].length < 9 &&  /\d/.test(sMsgText[sI].charAt(1)) == false && sMsgText[sI].match(/[0-9]+/).toString().length < 3 && sMsgText[sI].match(/[0-9]/)!=0){
         var perA = sMsgText[sI].match(/[a-z]+/).toString();
         var perB = sMsgText[sI].match(/\d{1,2}/).toString()
         var oAudio = document.getElementById('myaudio');
                switch (perA) {
                    case 'ono':                  
                  oAudio.src = 'http://dream74.trickweb.ru/Sounds/Osob_natsion_ohoti/ono'+perB+'.ogg';
                  if (sMsgText[sI].match(/\d{1,2}/) < 21) playAudio();
                  OnSound = true;
                  sTemp = true;
                        break;    ...и т.д.          

Код:
if(Msg_Text.indexOf('*sm')!= -1){
         var Reg_sm = Msg_Text.match(/\*sm+[0-9]{1,2}\*/g);
         var sm = 0
         while (sm < Reg_sm.length){
            var img_sm = Reg_sm[sm].match(/[0-9]{1,2}/).toString();
            Msg_Text = Msg_Text.replace(Reg_sm[sm],'<img alt="*sm'+img_sm+'*" src="http://dream74.trickweb.ru/flowers/sm'+img_sm+'.gif" class="smile">');
            sm+=1
            }  
        } ...и т.д.

по формирования смайлов в окне декоратора чтот подобное сделаю
avatar
dream74
Banned

Сообщения : 161
Дата регистрации : 2013-04-17

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор dream74 в Чт Сен 18, 2014 5:07 am

max30 пишет:
Код:

 var sndBaseAdd1=document.getElementById('SoundsBaseAdd1');
 if(!sndBaseAdd1){
 document.getElementById('Sounds_content_div').appendChild(create( "div", { id: 'SoundsBaseAdd1', class: 'sounds_base'}));...
наверно лучше после формирования "SoundsBaseAdd1" в переменную закидывать, а то ж Null присвоится
avatar
dream74
Banned

Сообщения : 161
Дата регистрации : 2013-04-17

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор max30 в Сб Сен 20, 2014 2:52 pm

dream74 пишет:
...

Да, скорее так:
Код:

function createSoundsAdd1(){
    // форма уже создана (более проходов нет), выход
    if(sndBaseAdd1) { return } // первая инструкция.
    // блок переменных
 var sndSel, sndBaseAdd, sndSel1, i;
 for ( i=1; i<14; i++){ // тут переменная не обьяылена была ранее
    // было 2 обхода DOM -> теперь 1 обход
    sndSel=document.getElementById('SoundsSelect'+i);
    // было 2 обхода DOM -> теперь 1 обход
    sndBaseAdd=document.getElementById('SoundsBaseAdd'+i);
 sndSel.style.fontSize = '13px';
 sndSel.style.color = '#0E859F';
 if (sndBaseAdd && i!=1) sndBaseAdd.style.display = 'none';
 } // end for
 
 // было 2 обхода DOM -> теперь 1 обход
 sndSel1=document.getElementById('SoundsSelect1');
 sndSel1.style.fontSize = '14px';
 sndSel1.style.color = 'Fuchsia';
 

 document.getElementById('Sounds_content_div').appendChild(create( "div", { id: 'SoundsBaseAdd1', class: 'sounds_base'}));
 // было 3 обхода DOM -> теперь 1 обход
 sndBaseAdd1=document.getElementById('SoundsBaseAdd1');
 for(i=1; i<sound_list.length; i++){ // тут переменная не обьяылена была ранее
 sndBaseAdd1.appendChild(create("div", {id: 'sounds_div'+i, class: 'sounds_base_div', onclick: "insert_smile('chat_text', ' *" + sound_list[i]+ "* ', 'smiles_popup'); return false;"})).innerHTML = '*'+sound_list[i]+'*';
 sndBaseAdd1.appendChild(create("audio", {src: sound_list_src[i], id: "sound_list_srcA"+i}));
 document.getElementById('sound_list_srcA'+ i).volume = 0.6;
 sndBaseAdd1.appendChild(create("div", {class: 'input_sounds', onclick: "document.getElementById('sound_list_srcA" + i + "').play()"}, "\u266B"));
    } // end for
} // end of function

и...
Код:

var sndBaseAdd1; // сделать глобальной, иначе при каждом обращении идет проход по DOM после того, как формы созданы.
... я же не тестирую, на глаз смотрю)

См. фрагмент кода:
спойлер:

Фрагмент кода:
Код:

      switch (1) {
         case i:
            Sel1_i.style.fontSize = '14px';
            Sel1_i.style.color = 'Fuchsia';
            if (Add1_i) Add1_i.style.display = 'block';
            break;      
         default:
            Sel1_i.style.fontSize = '13px';
            Sel1_i.style.color = '#0E859F';
            if (Add1_i) Add1_i.style.display = 'none';
            break;      
      }
А так правильно:
Код:

      switch (i) {    // тут всегда выражение
         case 1:  // тут всегда значение
            ...
            break;      
         default:
            ...
            break;      
      }

Последнее:
спойлер:

Фрагмент кода с переменными:
Код:

var ElemTimeout_id;
var SoundOn;
var ToUser;
var ToMe;
var SoundSubMenuDescription;
var PlayList = '';
var Br_title = '';
var Br_description = '';
var Br_rubric_id = '';
var Br_visible = '1';
var usr_id = '';
var Br_password = '';
var Br_confirm_password = '';
var Br_access_post_comments = '3';
var Temp5 = true;
var Temp6 = true;
А так правильно:
Код:

var ElemTimeout_id,
SoundOn,
ToUser,
ToMe,
SoundSubMenuDescription,
PlayList = '',
Br_title = '',
Br_description = '',
Br_rubric_id = '',
Br_visible = '1',
usr_id = '',
Br_password = '',
Br_confirm_password = '',
Br_access_post_comments = '3',
Temp5 = true,
Temp6 = true;
Ключевое слово var теперь не отнимает память.
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор dream74 в Чт Сен 25, 2014 6:50 am

max30 пишет:
код декора обезжирил до 48 килобайт, только в мозиле не пойму, курсором не скролится окно со звуками (перемещается окно целиком), колесиком все норм, в хроме, опере тоже все норм Rolling Eyes
avatar
dream74
Banned

Сообщения : 161
Дата регистрации : 2013-04-17

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор max30 в Чт Сен 25, 2014 9:29 am

dream74 пишет:
...

Хорошая работа. Код уменьшен в 10 раз, при этом добавлен новый функционал.

Осталось по мелочи:
спойлер:

См. фрагмент кода
Код:

 case 9:
 break;
 case 10:
 break;
 case 11:
 break;
 case 12:
 break;
 case 13:
 break;


Допустимо (правильно) так:
Код:

 case 9:
 case 10:
 case 11:
 case 12:
 case 13:
 break;


Фунция обьявлена, но нигде не используется:
Код:

function getid(id) {
    return document.getElementById(id);
}
Или закомментировать или применить - применить лучший подход для сокращения кода.

Еще - в тексте скрипта, после последней ф-ии после последней скобки убрать пробелы.

Про браузер ФФ замечен глюк, надо согласиться для обновления до последней версии, если предложено. После этого все работает.

Еще можно одну фишку реализовать - предварительная загрузка изображений.
avatar
max30

Сообщения : 539
Дата регистрации : 2013-04-14
Возраст : 90

Вернуться к началу Перейти вниз

Re: Разработка и тестирование

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 1 из 4 1, 2, 3, 4  Следующий

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения