Форумы Форум www.proxomitron.ru
Все о программе Proxomitron
Главная  • FAQ для форума  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Личные сообщения  •  Вход
 Фильтр вставки своих ссылок - прошу помощи в настройке
 Сайт -> Форумы » Фильтры
Следующая тема
Предыдущая тема

Новая тема  Ответить
Автор Сообщение
Ciber SLasH
Member
Member


Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер

СообщениеДобавлено: Чт, Июн 20 2013 14:41 Цитировать |  |  | 

Приветствую всех!
Есть такой фильтр, который вставляет ссылки прокрутки в каждую страницу:
Код:
[Patterns]
Name = "Insert link "page_link""
Active = TRUE
Multi = TRUE
URL = "$TYPE(htm) & (^*(.js(^?)))"
Limit = 256
Match = "<end>"
Replace = "/*"
          "<style type='text/css' media="all">@import url('http://local.ptron/JS/__page_link/__page_link.css');</style>\r\n"
          "<script type='text/javascript' src='http://Local.ptron/JS/__page_link/__page_link.js'></script>\r\n"
          "*/"
          "$STOP()"

Но этот фильтр не работает, когда загрузка страниц идёт через Ajax. На сайте nVidia - не работает. Помогите пожалуйста доработать.
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Пт, Июн 21 2013 18:24 Цитировать |  |  | 

Так что не работает: вставка кода в конец страницы или отрисовка ссылок вставленным кодом?

И я бы вместо <end> использовал </html>: и попадёшь точнее, и по контент-тайпу дополнительная проверка. В частности, должен заработать используемый НВидией [идиотский] трюк с запросом на сервер для получения урла страницы, которую надо открыть.
К началу Профиль Сообщение
Ciber SLasH
Member
Member


Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер

СообщениеДобавлено: Сб, Июн 22 2013 10:21 Цитировать |  |  | 

Не работал поиск драйверов на сайте нвидии после нажатии кнопки поиск.
Заменил <end> на </html> - заработало.

Но до этого в этом фильтре и так было </html>. А заменил я его на <end> потому, что на страницах бывает JS код, в котором генерируется другая страница и в коде присутствует </html>.
Т.е. теперь и на таком коде фильтр сработает:
Код:
<html>
<script>
content = "<html>..</html>";
</script>
</html>
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Сб, Июн 22 2013 14:50 Цитировать |  |  | 

Хм.. Скрипт, генерирующий html, находится не в отдельном файле, а в самом html? А ещё говорили, что у ATI программисты криворукие...

Полагаю, для такого случая будет достаточно искать последний </html>:
Код:
Match = "(</html>)\1 (^?)"


Пробел нужен, чтобы съесть все переводы строк и прочий witespace, который часто встречается перед концом файла. Limit должен это учитывать (хотя любой пробел там почти наверняка будет означать, что это конец файла, а не кусок скрипта).
К началу Профиль Сообщение
Ciber SLasH
Member
Member


Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер

СообщениеДобавлено: Сб, Июн 22 2013 16:37 Цитировать |  |  | 

Благодарю!
chAlx писал(а):
Хм.. Скрипт, генерирующий html, находится не в отдельном файле, а в самом html? А ещё говорили, что у ATI программисты криворукие...

Да, бывает и такое. Мало того, встречаются страницы, в которых тэги скрипта вставляются за </html>.
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Вс, Июн 23 2013 02:45 Цитировать |  |  | 

Ciber SLasH писал(а):
встречаются страницы, в которых тэги скрипта вставляются за </html>.

Получается, на них фильтр не работает?
К началу Профиль Сообщение
Ciber SLasH
Member
Member


Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер

СообщениеДобавлено: Вс, Июн 23 2013 09:54 Цитировать |  |  | 

Код:
[Patterns]
Name = "Insert link "page_link""
Active = TRUE
Multi = TRUE
URL = "$TYPE(htm) & (^*(.js(^?)))"
Limit = 32767
Match = "(</html>)\1 (^?)"
Replace = "<style type='text/css' media="all">@import url('http://local.ptron/JS/__page_link/__page_link.css');</style>\r\n"
          "<script type='text/javascript' src='http://Local.ptron/JS/__page_link/__page_link.js'></script>\r\n"
          "$STOP()"


На этих сайтах не работает:
1
2
3
4
5
6
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Вс, Июн 23 2013 12:55 Цитировать |  |  | 

http://forum.vingrad.ru/index.php оканчивается стандартным </html> -- должно работать. Остальные -- невалидный HTML. Авито вообще без корневого элемента <html></html> работает...

Как воркэрауд, можно использовать логику "</html> и всё за ним до конца файла", подобрав соответствующий лимит. И в этот раз не забыть вставить </html> на место:
Код:
URL = "(^*.js(^?)) $TYPE(htm)"
Match = "(</html> * (^?))\1"
Replace = "$STOP() \1 ..."


Возможно, будет проще вставляться в начало кода (где и стилям самое место). Например, если привязаться к <head>, то он всегда будет "тот самый" (первый), а за счёт $STOP() все дальнейшие скриптовые вставки не будут обрабатываться. Правда, <head> бывает не везде...
К началу Профиль Сообщение
Ciber SLasH
Member
Member


Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер

СообщениеДобавлено: Вс, Июн 23 2013 15:10 Цитировать |  |  | 

Благодарю за помощь! Wink
Сделал так:
Код:
[Patterns]
Name = "Insert link "page_link" <html | head>"
Active = TRUE
Multi = TRUE
URL = "(^*.js(^?)) $TYPE(htm)"
Limit = 32767
Match = "(<(html|head)(((\s[a-z]+(=$AV(*)|))+)|)>)\#"
Replace = "\@\r\n"
          "<style type='text/css' media="all">@import url('http://local.ptron/JS/__page_link/main.css');</style>\r\n"
          "<script type='text/javascript' src='http://Local.ptron/JS/__page_link/main.js'></script>\r\n"
          "$STOP()"


main.css:
Код:
#__page_bottom-link:link, #__page_bottom-link:visited, #__page_top-link:link, #__page_top-link:visited {
   z-index: 1000 !important;
   position: fixed !important;
   bottom: 35px !important;
   right: 5px !important;
   width: 20px !important;
   height: 20px !important;
   padding-top: 5px !important;
   padding-left: 2px !important;
   text-align: center !important;
   text-decoration: none !important;
   color: green !important;
   font: bold 2em serif !important;
   display: block !important;
   border: 2px solid #C3DAE6 !important;
   background-color: #F1FFF5 !important;
   font: 10pt serif !important;
   opacity: 0.5 !important;
}
#__page_bottom-link:hover, #__page_bottom-link:active, #__page_top-link:hover, #__page_top-link:active {
   color: #33cc00 !important;
   border: 2px solid #b4d0e0 !important;
   opacity: 0.6 !important;
}

#__page_top-link:link, #__page_top-link:visited {
   bottom: 5px !important;
}

main.js
Код:
listen(window, "load", function() {
   var myLinkBottom = document.createElement('A');
      myLinkBottom.id = '__page_bottom-link';
      myLinkBottom.href = 'javascript:void();';
      myLinkBottom.innerHTML = '▲';
      myLinkBottom.onclick = function() {
         window.scrollTo(0,0);
      }
      document.body.appendChild(myLinkBottom);

   var myLinkTop = document.createElement('A');
      myLinkTop.id = '__page_top-link';
      myLinkTop.href = 'javascript:void();';
      myLinkTop.innerHTML = '▼';
      myLinkTop.onclick = function() {
         window.scrollTo(0,window.scrollMaxY);
      }
      document.body.appendChild(myLinkTop);
});

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/*
[ Add event callback-function ]
@param1   (Object)   - элемент, к которому прикрепляется событие
@param2   (String)   - имя события без предшествующего "on"
@param3   (Object)   - callback-функция
--------------------------------------------------------------------------------
Example:
   // Add "window.onload" callback
   listen(window, "load", function(){ alert("window.onload"); });
   listen(window, "load", new Function(" alert('window.onload'); "));
*/
function listen(elem, eName, eFunc) {
   if (elem) {
      if (elem.addEventListener) {
         elem.addEventListener(eName, eFunc, false);
      } else if (elem.attachEvent) {
         elem.attachEvent("on"+eName, eFunc);
      }
   }
}
К началу Профиль Сообщение
Показать сообщения:      
 
Новая тема  Ответить

 Перейти:   




Следующая тема
Предыдущая тема
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


P o w e r e d b y p h p B B © p h p B B G r o u p :: T h e m e b a s e d o n FI T h e m e :: Часовой пояс: GMT + 3