LINUX.ORG.RU

user-script для обхода away.php


0

1
var jQueryScriptOutputted = false;
function initJQuery() {

   //if the jQuery object isn't available
   if (typeof(jQuery) == 'undefined') {


       if (! jQueryScriptOutputted) {
           //only output the script once..
           jQueryScriptOutputted = true;
           document.write("<script type=\"text/javascript\"
src=\"http://code.jquery.com/jquery-latest.min.js\"></script>");
       }
       setTimeout("initJQuery()", 50);
   } else {

       $(function() {
       $('a').each(
function(i)
{
 var str = $(this).attr('href');
 var rx = /.*vkontakte\.ru\/away.php\?to=(.*)/;
 var res = rx.exec(str);
 if(res!=null){
   var str2 = res[1];
   var rx2 = /http%3A%2F%2F(.*)/;
   var r2 = rx2.exec(str2);
   if(r2!=null){
     $(this).attr('href', "http://" + r2[1]);
   } else {
     $(this).attr('href', "http://" + str2);
   }
  }
});
       });
   }

}

initJQuery();

Попробовал написать удаляльщик ссылок away.php вконтакте, чтобы подгружать его greasemonkey. На локалхосте работает, во вконтакте - нет. Интересно, у них там защита, или всё-таки у меня кривые руки?

★★★★

а ещё с undefined можно поступать так:

(function(undef) {
    //if the jQuery object isn't available 
    if (jQuery === undef) {
        
        // ... ... ...
        // ... ... ...
        // ... ... ...
    }
    
    // ... ... ...
    // ... ... ...
    // ... ... ...
    
}) ()
user_id_68054 ★★★★★ ()

кстате в чём сикрет этих волшебных timeout 50 милисекунд? попахивает нелогичностью :-)

лучшебы тогда сразу ДВА <script /> блока вставлять .. — один в jQuery, а чторой с реальным кодом :-)

user_id_68054 ★★★★★ ()

var my_real_func = function() {
    alert("эта функция запуститься только после того как загрузиться jquery-latest.min.js !")
}

document.write(
    "<script type=\"text/javascript\" src=\"http://code.jquery.com/jquery-latest.min.js\"></script>"
)

document.write(
    "<script type=\"text/javascript\">my_real_func()</script>"
)
user_id_68054 ★★★★★ ()
Ответ на: комментарий от trashymichael

> походу никто не гарантирует что второй скрипт выполнится позже и только после того как первый отработает...

поумолчанию script-елементы выполняются друг-за-друшкой (как один большой script-елемент), но можно установить аттрибут
<script ... async=«enable» ...>...</script> (както так я точно непомню) и как раз будут «не гарантия одновременности»


user_id_68054 ★★★★★ ()
Ответ на: комментарий от trashymichael

а вто какие мне надо было ТОЧНо сделать замечание — это то что использовать document.write(...) — нехорошо [по современным меркам Www-javascript-программирования]

..а вместо этого надо былобы использовать Document-Object-Model

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

user_id_68054 ★★★★★ ()
Ответ на: комментарий от user_id_68054

так вот, не знаю как там с write дела обстоят, но тут речь идет не об обычных script элементах, а о генерируемых скриптом, так что когда ты делаешь

добавить-элемент-скрипт-на-страницу
вызвать-что-то-завязанное-на-этом-скрипт

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

trashymichael ★★★ ()
Ответ на: комментарий от trashymichael

хотя наверное я ступил, ведь эту проблему ты и пытался решить :)

trashymichael ★★★ ()

На userscripts.org был нормальный универсальный чинильщик таких ссылок. Но если тебе непременно надо заставить работать свою писанину - то #include ты реализовал неправильно. И да, jquery для такой простой задачи не нужен. Use GetElementsByTagName(«a»), Luke.

legolegs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.