Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.05.2010, 10:59
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

Проблемы со скриптом от Оперы
Собственно есть 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

Последний раз редактировалось Black_Sun, 03.05.2010 в 11:58.
Ответить с цитированием
  #2 (permalink)  
Старый 03.05.2010, 11:16
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Вы опубликовали очень много кода.

Пожалуйста, локализуйте проблему!

Выделите фрагмент кода, по которому есть вопрос и опубликуйте его отдельно.

И, по возможности, уберите из кода мусор, чтобы нам легче было сориентироваться и помочь решить вашу проблему.

Спасибо.

P.S. код форматируют специальные теги [js] ... [/js], [html] ... [/html] и другие аналогичные, см. http://javascript.ru/formatting
Ответить с цитированием
  #3 (permalink)  
Старый 03.05.2010, 11:41
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

Ок, сделал, если всё равно много напишите тогда буду по кускам просто в каждом посте писать и разбираться
Ответить с цитированием
  #4 (permalink)  
Старый 04.05.2010, 14:11
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

так, по порядку
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 или что-то подобное?)

Последний раз редактировалось Black_Sun, 04.05.2010 в 14:14.
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2010, 00:27
Интересующийся
Отправить личное сообщение для Lexi Посмотреть профиль Найти все сообщения от Lexi
 
Регистрация: 14.03.2009
Сообщений: 29

Цитата:
потому как пишет что l.element is undefined
«BeforeExternalScript
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»
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2010, 13:16
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

А по русски можно? а то немного понял, т.е. BeforeExternalScript надо использовать вместо load?

p.s. Ещё с куки беда, я тут поколдовал с alert он функцию md5crypt.value не видит вообще(не выводит ничего alert) так же выводит null при написании var n=f(cookieName);alert(f(cookieName)); беда в общем
Ответить с цитированием
  #7 (permalink)  
Старый 07.05.2010, 00:13
Интересующийся
Отправить личное сообщение для Lexi Посмотреть профиль Найти все сообщения от Lexi
 
Регистрация: 14.03.2009
Сообщений: 29

BeforeExternalScript блочит загрузку скрипта, который соответствует регэкспу. Не факт, что он обязателен. Но это проще посмотреть в опере, выкинув этот кусок кода.
Ответить с цитированием
  #8 (permalink)  
Старый 07.05.2010, 09:54
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

Lexi, вы правы, работает и без него, но вот после ввода каптчи cookie не записывается, а в консоле ошибок пишется
Код:
Ошибка: document.selectNodes is not a function
Источник: /extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js
Строка: 427
Ответить с цитированием
  #9 (permalink)  
Старый 07.05.2010, 13:30
Интересующийся
Отправить личное сообщение для Lexi Посмотреть профиль Найти все сообщения от Lexi
 
Регистрация: 14.03.2009
Сообщений: 29

Логично, ведь фокс это не поддерживает. Но в данном случае оно должно сводиться к document.getElementsByTagName('a')
Ответить с цитированием
  #10 (permalink)  
Старый 07.05.2010, 13:45
Аспирант
Отправить личное сообщение для Black_Sun Посмотреть профиль Найти все сообщения от Black_Sun
 
Регистрация: 29.04.2010
Сообщений: 68

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))
 }
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто подскажет "чайнику"каким скриптом устроен сайт www.shopmetrics.com mila26 Ваши сайты и скрипты 5 29.01.2010 10:24
Помогите со скриптом Pilageen Общие вопросы Javascript 5 13.04.2009 14:13
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47
Скрипт не работает во всех браузерах, кроме Оперы Yadooumne! Элементы интерфейса 6 27.10.2008 17:08