Автор |
Сообщение |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
Можно ли создать фильтр для изменения кода js, если сайт с этим js загружается через iFrame.
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
Можно  |
вот пример js:
site.com/js/main.js в нем нужно заменить кусок кода:
var id = Math.floor((Math.rand() * Array.length));
заменить на:
var id = Math.floor(*rand);
можете глянуть:
Код: |
URL = "site.com/js/main.js"
Active = TRUE
Limit = 60
Match = "var id = Math.floor\(\(Math.rand\(\) * Array.length\)\);"
Replace = "var id = Math.floor\(*rand\);"
|
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
На site.com нет такого ;)
Начнём с того, что фильтр должен проходить тест на коде, скопированном из реальной страницы (и не только нужный фрагмент, а побольше). И надо проверять, чтобы страница была "сырая", а не DOM-source, построенный браузером по своей внетренней модели после парсинга (как делает Мозилла, если выделить фрагмент страницы и просмотреть "исходник" фрагмента).
Если вопрос про фрейм, то надо смотреть, как он загружается: для скриптов используется много способов. Это даст конкретный URL, который надо обработать (либо отсутствие такового, если фрейм генерится другим скриптом).
Если URL верный, то следующая типичная проблема -- Content-Type.
Можно в логе посмотреть, как данный файл отдаётся: возможно, он и не фильтруется вовсе. Тогда надо будет добавить заголовочный фильтр, принуждающий Прокс фильтровать содержимое и такого типа (везде, с данного сайта или конкретный URL). Делается это командой $FILTER(); вроде, в дефолтном конфиге что-то такое было (в RussianEdition точно было).
Ещё вариант, почему рабочий фильтр не срабатывает -- мешают другие фильтры. Тут есть разные способы наладить взаимодействие, но для тестирования достаточно поместить свой фильтр в начало списка (чтобы он остальным мешал, а не наоборот;)
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
А это вообще должно работать в JS?
|
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
А это вообще должно работать в JS? |
вместо *rand будет рандомное значение
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
На site.com нет такого ;) |
Код: |
https://pliashkou.com/projects/random/js/main.js |
сам iframe берется отсюда
Код: |
https://pliashkou.com/projects/random/ |
я пробовал прописать js в на главной странице, но он не подключается у меня, если бы подключился, то можно было бы вставить кусок кода без изменения main.js
Код: |
<script type="text/javascript"></script> |
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
код немного изменился:
Код: |
$(document).on('click', '.rollroulette', function () {
var id = Math.floor((Math.random() * usersArray.length));
view.setWinner(usersArray[id]);
view.resizeWindow();
})
нужно заменить только id на rand |
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Общие вопросы мы обсудили: копируешь html в фильтр и подправляешь скобки. Для дальнейшего обсуждения нужен код фильтра, который не работает (и уточнение, как не работает: в тесте или только на реальном сайте).
|
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
Общие вопросы мы обсудили: копируешь html в фильтр и подправляешь скобки. Для дальнейшего обсуждения нужен код фильтра, который не работает (и уточнение, как не работает: в тесте или только на реальном сайте). |
Код: |
[Patterns]
Name = "Iframe 1"
Active = TRUE
Multi = TRUE
URL = "pliashkou.com/projects/random/js/main.js"
Limit = 32
Match = "view.setWinner\(usersArray[id]\)"
Replace = "view.setWinner(usersArray[rand])"
|
не работает, может что то забыл добавить.
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Квадратные скобки тоже надо экранировать бэкслешем (в Match).
ПС: Если не работает, пиши, в каком тесте (только на реальном сайте или в тестовом окне Прокса тоже).
|
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
Квадратные скобки тоже надо экранировать бэкслешем (в Match).
ПС: Если не работает, пиши, в каком тесте (только на реальном сайте или в тестовом окне Прокса тоже). |
поменял на такое вариант
Код: |
[Patterns]
Name = "Iframe 1"
Active = TRUE
Multi = TRUE
URL = "pliashkou.com/projects/random/js/main.js"
Limit = 32
Match = "view.setWinner\(usersArray\[id\]\)"
Replace = "view.setWinner(usersArray[rand])" |
заработало) перезагрузил страницу.
только при загрузки через iframe не происходит замены.
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
А где там фрейм?
При перезагрузке статики (к которой обычно относятся js, css) часто берётся версия из кеша. Так что при тестах reload имеет смысл делать с зажатым шифтом.
|
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
А где там фрейм?
При перезагрузке статики (к которой обычно относятся js, css) часто берётся версия из кеша. Так что при тестах reload имеет смысл делать с зажатым шифтом. |
Это js подгружается через приложения Вконтакте посредством iframe и там видимо куки прописываются такого вида
Код: |
pliashkou.com/projects/random/js/main.js&5555555 |
а у меня меняется js только у
Код: |
pliashkou.com/projects/random/js/main.js |
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
asgard:
URL Match срабатывает по префиксу, так что любые продолжения урла не влияют.
Multi нужен для повторной фильтрации заменённого текста другими фильтрами. Тут это вряд ли актуально.
Может, там всё по https подгружается? Надо лог Прокса смотреть.
|
|
|
К началу |
Профиль Сообщение |
 |
asgard
Newbee

Зарегистрирован: 11.11.2015
Сообщения: 17
|
chAlx писал(а): |
asgard:
URL Match срабатывает по префиксу, так что любые продолжения урла не влияют.
Multi нужен для повторной фильтрации заменённого текста другими фильтрами. Тут это вряд ли актуально.
Может, там всё по https подгружается? Надо лог Прокса смотреть. |
Да, через https
|
|
|
К началу |
Профиль Сообщение Отправить e-mail |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
|
К началу |
Профиль Сообщение |
 |
|