Проблемы со скриптом от Оперы
Собственно есть 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. код форматируют специальные теги [js] ... [/js], [html] ... [/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, время: 05:43. |