Проблемы со скриптом от Оперы
Собственно есть userjs код
Тут самое начало и тут же проблема, как преобразовать в greasemonkey этот код var cookieName = 'userjs_data'; *!* opera.addEventListener("BeforeExternalScript",function(l) { var m=l.element.getAttribute("src",false); */!* if(m) { if(m.search(/^http:\/\//i)!=-1&&m.search(/http:\/\/(\w\.)*mysite\.net(:\d+)?\//i)==-1) { l.preventDefault() } } } ,false); Тут я незнаю чем заменить set(document.getElementById("downl")); function g() { if(location.href.search(/^http:\/\/(www\.)?mysite\.net\/download\/.+\.html$/i)!=-1) { *!* set(document.getElementById("downl")); */!* var o=document.getElementById("dvdownl"); if(o) { if(o.md5crypt&&o.md5crypt.value) { j(cookieName,e(o.md5crypt.value),0,".mysite.net") } o.submit() } return } Тут пытался заменить var l=document.selectNodes("//a[@href]"); на get...byTagName, ...evaluate не вышло if(location.href.search(/mysite\.net\/tmpl\/download\.php(\?link=)?/i)!=-1) { if(top!=self&&location.href.indexOf("#userjs")==-1) { top.location.href=location.href+"#userjs"; return } *!* var l=document.selectNodes("//a[@href]"); */!* for(var m=0;m<l.length;m++) { if(l[m].href.search(/^http:\/\/(\w+\.)?mysite\.net\/download[\da-f]+\//)!=-1) { l[m].onclick=null } } var n=f(cookieName); k(cookieName,".mysite.net"); ...... Ну а тут начинается самое интересное, по идее cookies он должен захватывать и преобразовывать или же нет? function j(m,o,l,n) { o=o?escape(o):""; n=n?n:""; l=l?l.toGMTString():""; document.cookie=m+"="+o+"; domain="+n+"; path=/; expires="+l } function f(m) { var p=m+"="; var o=document.cookie.indexOf(p); if(o==-1) { return null } var n=document.cookie.indexOf(";",o+p.length); if(n==-1) { n=document.cookie.length } var l=p.length; return unescape(document.cookie.substring(o+l,n)) } function k(l,m) { m=m?m:""; document.cookie=l+"=; domain="+m+"; path=/; expires="+new Date((new Date).getTime()-100000000000).toGMTString() } на Опере работает идеально, но в Firefox (greasemonkey) работать на всю мощь отказывается Вот что мне удалось сделать(изменил только верх, где addEventListener) var cookieName = 'userjs_data'; *!* window.addEventListener("load",function(l) { aelements = document.getElementsByTagName("a"); for (l=0;l<aelements.length;l++) { var m = aelements[l].getAttribute("src",false); */!* if(m) { if(m.search(/^http:\/\//i)!=-1&&m.search(/http:\/\/(\w\.)*mysite\.net(:\d+)?\//i)==-1) { l.preventDefault() } } } } ,false); Помогите плиз отладить скрипт и где надо что-то добавить/удалить/изменить и т.п. p.s. Я так полагаю проблема в cookies и в var l=document.selectNodes("//a[@href]"); и ещё Консоль ошибок показывает что неизвестно l.element |
Вы опубликовали очень много кода.
Пожалуйста, локализуйте проблему! Выделите фрагмент кода, по которому есть вопрос и опубликуйте его отдельно. И, по возможности, уберите из кода мусор, чтобы нам легче было сориентироваться и помочь решить вашу проблему. Спасибо. P.S. код форматируют специальные теги [j s] ... [/js] , [ht ml] ... [/html] и другие аналогичные, см. http://javascript.ru/formatting |
Ок, сделал, если всё равно много напишите тогда буду по кускам просто в каждом посте писать и разбираться
|
так, по порядку
1. чем можно заменить var m=l.element.getAttribute("src",false); потому как пишет что l.element is undefined 2. чем можно заменить var l=document.selectNodes("//a[@href]"); 3. чем можно заменить opera.addEventListener("BeforeExternalScript",function(l)под firefox greasemonkey и 4.Как проверить перехватываются ли cookie и изменяются ли? (куда поставить alert или что-то подобное?) |
Цитата:
Fired when a script element with a src attribute is encountered. The script element is available as the element attribute of the UserJSEvent. ... element Object, readonly: the script or plug-in element. All the usual DOM methods are available, such as getAttribute and setAttribute. Available for BeforeExternalScript» |
А по русски можно? а то немного понял, т.е. BeforeExternalScript надо использовать вместо load?
p.s. Ещё с куки беда, я тут поколдовал с alert он функцию md5crypt.value не видит вообще(не выводит ничего alert) так же выводит null при написании var n=f(cookieName);alert(f(cookieName)); :( беда в общем |
BeforeExternalScript блочит загрузку скрипта, который соответствует регэкспу. Не факт, что он обязателен. Но это проще посмотреть в опере, выкинув этот кусок кода.
|
Lexi, вы правы, работает и без него, но вот после ввода каптчи cookie не записывается, а в консоле ошибок пишется
Код:
Ошибка: document.selectNodes is not a function |
Логично, ведь фокс это не поддерживает. Но в данном случае оно должно сводиться к document.getElementsByTagName('a')
|
Lexi,
ясно, но всё равно f(cookieName) alert выдаёт null. вверху скрипта var cookieName = 'userjs_data'; а получение взято отсюда http://www.codenet.ru/webmast/php/cookies.php function f(m) //Получение куки (function getCookie(name) ) { var p=m+"="; //var prefix = name + "=" var o=document.cookie.indexOf(p); //var cookieStartIndex = document.cookie.indexOf(prefix) if(o==-1) //if (cookieStartIndex == -1) { return null } var n=document.cookie.indexOf(";",o+p.length); //var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length) if(n==-1) //if (cookieEndIndex == -1) { n=document.cookie.length //cookieEndIndex = document.cookie.length } var l=p.length; return unescape(document.cookie.substring(o+l,n)) //return unescape(document.cookie.substring (cookieStartIndex + prefix.length, cookieEndIndex)) } |
Часовой пояс GMT +3, время: 14:47. |