Разработка и тестирование
+7
-= Амнезия =-
=ZANOZA=
AleXandra
dream74
Сталоне
max30
ЭфедроШка
Участников: 11
:: Наша Смотришка :: АнтиГлюки :: Таблетки
Страница 1 из 4
Страница 1 из 4 • 1, 2, 3, 4
Разработка и тестирование
Только для разработчиков!!!
Здесь выкладывает, скрипты, патчи, фиксы, с готовым решением
Последний раз редактировалось: ЭфедроШка (Вс Май 26, 2013 7:51 am), всего редактировалось 3 раз(а)
Фиксим скрипт ЧатФильтр...
Фиксим подгрузку скрипта ЧатФильтр после ввода пароля. Теперь работает автоматом, без кликов и доп. эл-тов 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 10:25 pm), всего редактировалось 1 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Фиксим скрипт Декоратор... аналогично...
Фиксим подгрузку скрипта Декоратор после ввода пароля. Теперь работает автоматом, без кликов и доп. эл-тов 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 2:39 pm), всего редактировалось 1 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
У себя сделал через ивенты.
Как то так:
Как то так:
- Код:
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);}
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
межбраузерная поддержка скрипта...
max30 пишет:Фишка в том, что Опера это событие НЕ поддерживает... У меня была попытка подобное реализовать, но позже отказался ввиду указанной причины... спецификация DRAFT - черновик или пробное решение, с далекими перспективами и претензиями на стандарт...Сталоне пишет:У себя сделал через ивенты.
...........................
The problem is that Opera doesn't support the js event "DOMSubtreeModified".
Мы стараемя добиться универсального кода, хотя бы для ЛИСЫ+ХРОМ+ОПЕРА. С событиями надо вообще осторожно, громоздкие фреймворки решают эту проблему, но нам это не подходит..
Поэтому ищем ОБЩЕЕ решение и БЕЗ сторонних библиотек....
Интересная ссылка про браузеры [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
max30 пишет:max30 пишет:Фишка в том, что Опера это событие НЕ поддерживает... У меня была попытка подобное реализовать, но позже отказался ввиду указанной причины... спецификация DRAFT - черновик или пробное решение, с далекими перспективами и претензиями на стандарт...Сталоне пишет:У себя сделал через ивенты.
...........................
The problem is that Opera doesn't support the js event "DOMSubtreeModified".
Мы стараемя добиться универсального кода, хотя бы для ЛИСЫ+ХРОМ+ОПЕРА. С событиями надо вообще осторожно, громоздкие фреймворки решают эту проблему, но нам это не подходит..
Поэтому ищем ОБЩЕЕ решение и БЕЗ сторонних библиотек....
Интересная ссылка про браузеры [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
Справедливо ... В фаерфоксе , в консоли уже пишет что это Deprecated
запилил себе , работает как надо
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
Ловим глюки Скриптов
Нашел уже несколько версий ЧатФильтра) Кто у кого копирует, не понятно. Причем, копируют с теми же ошибками)
Эксперимент №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
}
************************************************************************************
Резюме: скрипт дает знать о себе на абсолютно любых сайтах и(или) во фреймах. Это частично ответ и про куки))) Если разработчики хотели зарезервировать пространство для ЗАПРОСОВ (например, для чат-бота) таким образом, то это делается не так(((
В НЫНЕШНЕЙ РЕАЛИЗАЦИИ ЧАТФИЛЬТРА ЕСТЬ ДЫРА ДЛЯ ЗЛОУМЫШЛЕННИКА! ПОДРОБНОСТИ РАСКРЫВАТЬ НЕ БУДУ..
Эксперимент №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 (Чт Июн 20, 2013 7:58 am), всего редактировалось 4 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
// ==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 проект или ещё что то ...
// @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 5:49 pm), всего редактировалось 1 раз(а)
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
Re: Разработка и тестирование
- Код:
// ниже полный абсурд - условие не выполнимо никогда <============= мифическое условие
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;
}
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
ФИКСЫ
ТЫ ПРОЧИТАЙ ВСЕ И ОБДУМАЙ. ОГРАНИЧЕНИЕ ПО ТЭГУ И ДОМЕНЫ - СКРИПТ ДОХОДИТ ДО ЭТОГО УСЛОВИЯ И УХОДИТ С ДОМЕНА, НЕ ОСТАВЛЯЯ СЛЕДОВ И НЕ ПОДГРУЖАЯ БОЛЕЕ НИЧЕГО.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Смотрим ТОП трансляции без тормозов
Почему "тормозит" страница с трансляцией, особенно это чувствительно в ТОПовых трансляциях? Потому, что все "ВИТРИНЫ" смотришки обновляются по технологии КОММИТОВ. Что это - во фреймы циклически на страницу по таймеру подгружается контент на все зеркала из разных источников.
Решаем проблему только на СТРАНИЦЕ с трансляцией(чтобы не раздражать администрацию=)). Дополнительно очистка банеров вокруг плеера (НАД-ПОД-СПРАВА от чата). Итог - страница "стоит" без подгрузки как картинка.
Ниже ПРОВЕРЕННЫЙ код с комментариями.
Этот код достаточно поместить в первую часть скрипта ЧатФильтр.
Из минусов - убивается верхний фрейм с кнопкой выхода из аккаунта. Но можно, при желании этот код повесить на свою кнопку ВКЛ/ОТКЛ.
Решаем проблему только на СТРАНИЦЕ с трансляцией(чтобы не раздражать администрацию=)). Дополнительно очистка банеров вокруг плеера (НАД-ПОД-СПРАВА от чата). Итог - страница "стоит" без подгрузки как картинка.
Ниже ПРОВЕРЕННЫЙ код с комментариями.
- спойлер:
// блок переменных
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 (Сб Сен 13, 2014 1:08 am), всего редактировалось 5 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
ТЫ ПРОЧИТАЙ ВСЕ И ОБДУМАЙ. ОГРАНИЧЕНИЕ ПО ТЭГУ И ДОМЕНЫ - СКРИПТ ДОХОДИТ ДО ЭТОГО УСЛОВИЯ И УХОДИТ С ДОМЕНА, НЕ ОСТАВЛЯЯ СЛЕДОВ И НЕ ПОДГРУЖАЯ БОЛЕЕ НИЧЕГО.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
================================================
Код:
// FIX[2]
// не позволяем грузиться на иных страницах (можно еще раз проверить на уникальность тегов)
if (!document.getElementById('chat_block')) {
return;
}
ПО ПОВОДУ ЭТОГО КУСКА КОДА ИЗ ТВОЕГО СООБЩЕНИЯ - МНЕ БОЛЬШЕ МОЙ ПОДХОД НАРАВИТСЯ - ДАЁТ ВЫПОЛНЯТСЯ ТОЛЬКО НА РАЗРЕШЁННЫХ 3 ДОМЕНАХ ... НА ОСТАЛЬНЫХ ЗАВЕРШАЕТСЯ СРАЗУ + ДЕРЕКТИВЫ В ОСТАЛЬНЫХ БРАУЗЕРАХ РАБОТАЮТ НОРМАЛЬНО.
ПРО ТВОЕ УСЛОВИЕ И 3 ДОМЕНА - ДАЖЕ ЛОГИКА НЕ ВЕРНА, КАК МИНИМУМ, ДОЛЖНО БЫТЬ УСЛОВИЕ =ИЛИ=. ПОСТАВЬ =ИЛИ= И ВСЕ ПОЙМЕШЬ) НУ КАК В ПЕРЕМЕННОЙ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО 3 ДОМЕНА, ВЕДЬ У ТЕБЯ УСЛОВИЕ =И=. НУ РАССМЕШИЛ. Я ДУМАЛ, ТЫ ПОНЯЛ УЖЕ. КАК Я УЖЕ ПИСАЛ ВЫШЕ - СОХРАНИ СТРАНИЦУ НА ГОГЛЕ И ТАМ НАЙДЕШ СКРИПТ...
НУ Я НЕ УМЕЮ ИЗОБРЕТАТЬ НА ХОДУ. ТВОЯ ВЕРСИЯ БЫЛА ВЫДЕРНУТА ИЗ ФОРУМА ПО ТВОЙ ССЫЛКЕ. ОТТУДА И КОД.
ПРО ДИРЕКТИВЫ - ЛУЧШЕ ИХ ПРИДЕРЖИВАТЬСЯ. ПРИ ОЧЕРЕДНОМ ОБНОВЛЕНИИ ОБЕЗЬЯНКИ - МНОГИЕ СКРИПТЫ ОСТАНОВИЛИСЬ. ОБ ЭТОМ БЫЛО ПОДРОБНО В ФОРУМАХ. ОБЕЗЬЯНКА СТАНОВИТСЯ БОЛЕЕ СТРОГОЙ.
================================================
Код:
// FIX[2]
// не позволяем грузиться на иных страницах (можно еще раз проверить на уникальность тегов)
if (!document.getElementById('chat_block')) {
return;
}
ПО ПОВОДУ ЭТОГО КУСКА КОДА ИЗ ТВОЕГО СООБЩЕНИЯ - МНЕ БОЛЬШЕ МОЙ ПОДХОД НАРАВИТСЯ - ДАЁТ ВЫПОЛНЯТСЯ ТОЛЬКО НА РАЗРЕШЁННЫХ 3 ДОМЕНАХ ... НА ОСТАЛЬНЫХ ЗАВЕРШАЕТСЯ СРАЗУ + ДЕРЕКТИВЫ В ОСТАЛЬНЫХ БРАУЗЕРАХ РАБОТАЮТ НОРМАЛЬНО.
Последний раз редактировалось: Сталоне (Чт Июн 20, 2013 5:05 pm), всего редактировалось 2 раз(а)
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
опять...
=первый эксперимент=
===========================
зайди на любую страницу и сохрани ее. теперь посмотри что там. а там ты увидиш и подгруженный скрипт "ака файл 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("ку-ку, я фрейм!")};
=========================
я ничего не навязываю, пусть у тебя будет твое решение) вопрос закрыт.
===========================
зайди на любую страницу и сохрани ее. теперь посмотри что там. а там ты увидиш и подгруженный скрипт "ака файл 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("ку-ку, я фрейм!")};
=========================
я ничего не навязываю, пусть у тебя будет твое решение) вопрос закрыт.
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Мелкий фикс чатфильтра..
Фиксим функцию, которая разбивает текст в чате на 2 части.
Фиксим в том плане, что она грубо режет по 199-му(отсчитанного от нуля) символу сообщение и получается, что чаще всего СЛОВО разорвано и нечитаемо . Мы исправим это и будем резать по ближайшему пробелу слева от 199-го символа.
Фиксим в том плане, что она грубо режет по 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 (Сб Сен 13, 2014 1:10 am), всего редактировалось 3 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
фиксы
if (window.self != window.top) {
return;
}
По поводу этого кода выше - согласен , нужен ... Проверил без банерорезалок и без прокси, на чистом браузере , действительно скрипт подгружается на какой то iFrame во второй раз...
Но вот этот код ниже - не самый лучший пример , он показывает лишь количество элементов с тегом iframe на странице и отрабатывает один раз.
var frame = document.getElementsByTagName('iframe');
if (frame.length > 0 ){alert("ку-ку, я фрейм!")};
=======================================================
return;
}
По поводу этого кода выше - согласен , нужен ... Проверил без банерорезалок и без прокси, на чистом браузере , действительно скрипт подгружается на какой то iFrame во второй раз...
Но вот этот код ниже - не самый лучший пример , он показывает лишь количество элементов с тегом iframe на странице и отрабатывает один раз.
var frame = document.getElementsByTagName('iframe');
if (frame.length > 0 ){alert("ку-ку, я фрейм!")};
=======================================================
Сталоне- Сообщения : 148
Дата регистрации : 2013-01-24
Откуда : оттуда
еще пример
// вот более подробно и убедительно - ведь событие onload выполняется один раз
var frame = document.getElementsByTagName('iframe');
// тут ку-ку из всей коллекции в цикле со своим номером фрейма
for (var i=0; i < frame.length; i++)
if (frame[i]){alert("ку-ку, я фрейм № " + i)};
То есть, мы не позволяем грузить(по моему примеру после директив) скрипт во фрейм(Ы), но после загрузки, фреймы живут своей жизнью.
В данном случае мы управляем только загрузкой скрипта...
var frame = document.getElementsByTagName('iframe');
// тут ку-ку из всей коллекции в цикле со своим номером фрейма
for (var i=0; i < frame.length; i++)
if (frame[i]){alert("ку-ку, я фрейм № " + i)};
То есть, мы не позволяем грузить(по моему примеру после директив) скрипт во фрейм(Ы), но после загрузки, фреймы живут своей жизнью.
В данном случае мы управляем только загрузкой скрипта...
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Че тут? Или смотрим скрипт Декоратор..
Разный формат аудио:
- спойлер:
- Код:
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';
}
Справочно:
Для тройки браузеров подходит WAV и OGG. Целесообразно использовать OGG (меньший размер файла).
Последний раз редактировалось: max30 (Ср Сен 17, 2014 7:51 pm), всего редактировалось 2 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Че тут? Или смотрим скрипт ЧатФильтр..
Подробно посмотрел код ЧатФильтра. Ох и накалбасили разработчики с фрагментом формирования цветного ника. Десятки регулярных выражений и условий(if) и несколько функций.
Тоже самое можно решить одной функцией, главный посыл - зачем искать ссылку регуляркой, если найти ссылку проще и быстрее через DOM функции.
Пример функции, которая решит эту задачу быстро и просто:
Тоже самое можно решить одной функцией, главный посыл - зачем искать ссылку регуляркой, если найти ссылку проще и быстрее через 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;
}
Последний раз редактировалось: max30 (Сб Сен 13, 2014 1:12 am), всего редактировалось 1 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
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 8:10 pm), всего редактировалось 5 раз(а)
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
Смотрим код декоратора.
Большой размер JS файла:
Про переменные и время выполнения:
Оптимизируем раз:
Оптимизируем два:
Оптимизируем три:
Оптимизируем четыре:
Большой размер 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';
Оптимизируем раз:
- спойлер:
Находим функцию:- Код:
function VarInit(){
SoundOn = true;
...
if(document.getElementById('myaudio')){
removeElement('myaudio');
}
...
}
Достаточно так:- Код:
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;
}
Добавим маленькую ф-ию и избавимся от этих багов:- Код:
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';
Оптимизируем четыре:
- спойлер:
Смотрим код (даны примечания к коду). Ф-я оптимизировала код и скорость выполнения.- Код:
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 (увеличили скорость выполнения);
- уменьшили код;
Итого плюсы:
- добавили несколько переменных (не существенно).
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
по 4-му пункту согласен, 2-ой и 3-й, вчера по другому сделал, посмотри (и выше так же будет)max30 пишет:Смотрим код декоратора.
- Код:
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
}
} ...и т.д.
по формирования смайлов в окне декоратора чтот подобное сделаю
dream74- Banned
- Сообщения : 161
Дата регистрации : 2013-04-17
Re: Разработка и тестирование
наверно лучше после формирования "SoundsBaseAdd1" в переменную закидывать, а то ж Null присвоитсяmax30 пишет:
- Код:
var sndBaseAdd1=document.getElementById('SoundsBaseAdd1');
if(!sndBaseAdd1){
document.getElementById('Sounds_content_div').appendChild(create( "div", { id: 'SoundsBaseAdd1', class: 'sounds_base'}));...

dream74- Banned
- Сообщения : 161
Дата регистрации : 2013-04-17
Re: Разработка и тестирование
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;
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Re: Разработка и тестирование
код декора обезжирил до 48 килобайт, только в мозиле не пойму, курсором не скролится окно со звуками (перемещается окно целиком), колесиком все норм, в хроме, опере тоже все нормmax30 пишет:

dream74- Banned
- Сообщения : 161
Дата регистрации : 2013-04-17
Re: Разработка и тестирование
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);
}
Еще - в тексте скрипта, после последней ф-ии после последней скобки убрать пробелы.
Про браузер ФФ замечен глюк, надо согласиться для обновления до последней версии, если предложено. После этого все работает.
Еще можно одну фишку реализовать - предварительная загрузка изображений.
max30- Сообщения : 556
Дата регистрации : 2013-04-15
Возраст : 95
Страница 1 из 4 • 1, 2, 3, 4
:: Наша Смотришка :: АнтиГлюки :: Таблетки
Страница 1 из 4
Права доступа к этому форуму:
Вы не можете отвечать на сообщения