Автор |
Сообщение |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Приветствую всех!
Есть такой фильтр, который вставляет ссылки прокрутки в каждую страницу:
Код: |
[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

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

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

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Хм.. Скрипт, генерирующий html, находится не в отдельном файле, а в самом html? А ещё говорили, что у ATI программисты криворукие...
Полагаю, для такого случая будет достаточно искать последний </html>:
Код: |
Match = "(</html>)\1 (^?)" |
Пробел нужен, чтобы съесть все переводы строк и прочий witespace, который часто встречается перед концом файла. Limit должен это учитывать (хотя любой пробел там почти наверняка будет означать, что это конец файла, а не кусок скрипта).
|
|
|
К началу |
Профиль Сообщение |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Благодарю!
chAlx писал(а): |
Хм.. Скрипт, генерирующий html, находится не в отдельном файле, а в самом html? А ещё говорили, что у ATI программисты криворукие... |
Да, бывает и такое. Мало того, встречаются страницы, в которых тэги скрипта вставляются за </html>.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Ciber SLasH писал(а): |
встречаются страницы, в которых тэги скрипта вставляются за </html>. |
Получается, на них фильтр не работает?
|
|
|
К началу |
Профиль Сообщение |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Код: |
[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

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
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

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Благодарю за помощь!
Сделал так:
Код: |
[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);
}
}
}
|
|
|
|
К началу |
Профиль Сообщение |
 |
|