Полезная информация

Не получается решить проблему на форуме? Служба технической поддержки Mozilla Россия — support@mozilla-russia.org.
  • Форумы
  •  » Скрипты
  •  » Clean-URl.js заставить работать на подгружаемых страницах.

№111-09-2014 04:21:23

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Palemoon 24.0

Clean-URl.js заставить работать на подгружаемых страницах.

привет All!
Вот есть замечательный скрипт еще с Оперы, кот. замечательно рабаотает и по сей день.

скрытый текст

Выделить код

Код:

// ==UserScript==
// @name Clean URI
// @author TarquinWJ 
// @namespace http://www.howtocreate.co.uk/ 
// @version 1.3.3
// see http://www.howtocreate.co.uk/operaStuff/userJavaScript.html for details

window.addEventListener(
    'load',
    function mwjenabledCleanURI() {

        /****************************************************************************************
                                           Options can be set here
        ****************************************************************************************/

        var useSeparateLink = true; //true to create 'CleanURL' links, false to replace existing
        var fixLinkType = 0; //1 = redirect links, 2 = JavaScript window.open links, 0 = both
        var allowParams = false; //true = assume that all parameters after the start of the redirect URL are part of the URL
                                 //false = (default) only allow the redirect URL to exist within a single query parameter

        /***************************************************************************************/

        for( var x = 0, urlMatch = /window\.open\s*\(\s*["']([^"']*)["']/, httpMatch = /https?(:|%3a)(\/|%2f)(\/|%2f)/i; x < document.links.length; x++ ) {
            var newHref = '', curLink = document.links[x];
            if( ( fixLinkType != 1 ) && curLink.protocol.toLowerCase() == 'javascript:' && curLink.href.match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 1 ) && ( curLink.protocol.toLowerCase() == 'javascript:' || curLink.hash == '#' ) && curLink.hasAttribute('onclick') && curLink.getAttribute('onclick').match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 2 ) && curLink.hostname && !curLink.hostname.match(/w3c?.org$/) ) {
                if( pos = curLink.search.match(httpMatch) ) {
                    newHref = unescape(allowParams?curLink.search.substr(pos.index).replace(/#.*$/g,''):curLink.search.substr(pos.index).replace(/[&#].*$/g,''));
                } else if( pos = curLink.pathname.match(httpMatch) ) {
                    newHref = unescape(curLink.pathname.substr(pos.index).replace(/[&#].*$/g,''));
                }
            }
            if( newHref ) {
                var oRel = curLink.getAttribute('rel');
                oRel = oRel ? ( oRel + ' ' ) : '';
                curLink.setAttribute('rel',oRel+'redirect');
                if( useSeparateLink ) {
                    var oLink = document.createElement('a');
                    oLink.setAttribute('href',newHref);
                    oLink.appendChild(document.createTextNode('☼'));
                    curLink.parentNode.insertBefore(document.createTextNode(' '),curLink.nextSibling);
                    curLink.parentNode.insertBefore(oLink,curLink.nextSibling.nextSibling);
                    x++;
                } else {
                    curLink.setAttribute('replacedurl',curLink.href);
                    curLink.title = ( curLink.title ? ( curLink.title + ' - ' ) : '' ) + 'Old URL: ' + curLink.href;
                    curLink.href = newHref;
                }
            }
        }
    },
    false
);


Очищает ссылки типа goto?= или away.php?= и др. Но появились такие страницы как вконтакте или одноглазнике - когда страница "подгружается" снизу(или как вконтакте может и снизу и сверху подгружаться, "показать новую запись")... и вот в этой части страницы уже ссылки не очищаются.
Собсна вопросс-просьба, можно это побороть? Чтобы или сам скрипт периодически повторялся или мож еще событие какое ему дописать можно, чтобы реагировал... Или в GM дело?

Отредактировано HaGEN (11-09-2014 05:41:04)

Отсутствует

 

№211-09-2014 07:57:54

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Palemoon 24.0

Re: Clean-URl.js заставить работать на подгружаемых страницах.

хехех, вроде нашел сам. Полистал про window.addEventListener (ибо мну не кодер, хехе) и вот чего нашел:
просто продублировал тело скрипта еще раз с заменой в события 'load' на 'mouseover' и всё работаит :D Всё однож перед кликом надобно навести мыша на ссылку, вот оно и срабатывает, урачтоле!
Может можно как-то сделать изящнее, передать параметры(оба события и load и mouseover) в одну ф-цию...? хотя и так работает... вроде ;)

скрытый текст

Выделить код

Код:

// ==UserScript==
// @name            Clean-URI
// @namespace       http://userscripts.org/users/12
// @description     Очищает ссылки на тех сайтах где стоит переход http://...goto?=<нужный адресс>, делая рядом "чистую ссылку" - '☼'
// @version         1.3.3
// @license         GPL
// @include         *
// @grant none
// ==/UserScript==
window.addEventListener(
    'load',
    function mwjenabledCleanURI() {

        /****************************************************************************************
                                           Options can be set here
        ****************************************************************************************/

        var useSeparateLink = false; //true to create 'CleanURL' links, false to replace existing
        var fixLinkType = 0; //1 = redirect links, 2 = JavaScript window.open links, 0 = both
        var allowParams = false; //true = assume that all parameters after the start of the redirect URL are part of the URL
                                 //false = (default) only allow the redirect URL to exist within a single query parameter

        /***************************************************************************************/

        for( var x = 0, urlMatch = /window\.open\s*\(\s*["']([^"']*)["']/, httpMatch = /https?(:|%3a)(\/|%2f)(\/|%2f)/i; x < document.links.length; x++ ) {
            var newHref = '', curLink = document.links[x];
            if( ( fixLinkType != 1 ) && curLink.protocol.toLowerCase() == 'javascript:' && curLink.href.match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 1 ) && ( curLink.protocol.toLowerCase() == 'javascript:' || curLink.hash == '#' ) && curLink.hasAttribute('onclick') && curLink.getAttribute('onclick').match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 2 ) && curLink.hostname && !curLink.hostname.match(/w3c?.org$/) ) {
                if( pos = curLink.search.match(httpMatch) ) {
                    newHref = unescape(allowParams?curLink.search.substr(pos.index).replace(/#.*$/g,''):curLink.search.substr(pos.index).replace(/[&#].*$/g,''));
                } else if( pos = curLink.pathname.match(httpMatch) ) {
                    newHref = unescape(curLink.pathname.substr(pos.index).replace(/[&#].*$/g,''));
                }
            }
            if( newHref ) {
                var oRel = curLink.getAttribute('rel');
                oRel = oRel ? ( oRel + ' ' ) : '';
                curLink.setAttribute('rel',oRel+'redirect');
                if( useSeparateLink ) {
                    var oLink = document.createElement('a');
                    oLink.setAttribute('href',newHref);
                    oLink.appendChild(document.createTextNode('☼'));
                    curLink.parentNode.insertBefore(document.createTextNode(' '),curLink.nextSibling);
                    curLink.parentNode.insertBefore(oLink,curLink.nextSibling.nextSibling);
                    x++;
                } else {
                    curLink.setAttribute('replacedurl',curLink.href);
                    curLink.title = ( curLink.title ? ( curLink.title + ' - ' ) : '' ) + 'Old URL: ' + curLink.href;
                    curLink.href = newHref;
                }
            }
        }
    },
    false
);
/************************************************/
window.addEventListener(
    'mouseover',
    function mwjenabledCleanURI() {

        /****************************************************************************************
                                           Options can be set here
        ****************************************************************************************/

        var useSeparateLink = false; //true to create 'CleanURL' links, false to replace existing
        var fixLinkType = 0; //1 = redirect links, 2 = JavaScript window.open links, 0 = both
        var allowParams = false; //true = assume that all parameters after the start of the redirect URL are part of the URL
                                 //false = (default) only allow the redirect URL to exist within a single query parameter

        /***************************************************************************************/

        for( var x = 0, urlMatch = /window\.open\s*\(\s*["']([^"']*)["']/, httpMatch = /https?(:|%3a)(\/|%2f)(\/|%2f)/i; x < document.links.length; x++ ) {
            var newHref = '', curLink = document.links[x];
            if( ( fixLinkType != 1 ) && curLink.protocol.toLowerCase() == 'javascript:' && curLink.href.match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 1 ) && ( curLink.protocol.toLowerCase() == 'javascript:' || curLink.hash == '#' ) && curLink.hasAttribute('onclick') && curLink.getAttribute('onclick').match(urlMatch) ) {
                newHref = (RegExp.$1).replace(/\\\//g,'\/');
            } else if( ( fixLinkType != 2 ) && curLink.hostname && !curLink.hostname.match(/w3c?.org$/) ) {
                if( pos = curLink.search.match(httpMatch) ) {
                    newHref = unescape(allowParams?curLink.search.substr(pos.index).replace(/#.*$/g,''):curLink.search.substr(pos.index).replace(/[&#].*$/g,''));
                } else if( pos = curLink.pathname.match(httpMatch) ) {
                    newHref = unescape(curLink.pathname.substr(pos.index).replace(/[&#].*$/g,''));
                }
            }
            if( newHref ) {
                var oRel = curLink.getAttribute('rel');
                oRel = oRel ? ( oRel + ' ' ) : '';
                curLink.setAttribute('rel',oRel+'redirect');
                if( useSeparateLink ) {
                    var oLink = document.createElement('a');
                    oLink.setAttribute('href',newHref);
                    oLink.appendChild(document.createTextNode('☼'));
                    curLink.parentNode.insertBefore(document.createTextNode(' '),curLink.nextSibling);
                    curLink.parentNode.insertBefore(oLink,curLink.nextSibling.nextSibling);
                    x++;
                } else {
                    curLink.setAttribute('replacedurl',curLink.href);
                    curLink.title = ( curLink.title ? ( curLink.title + ' - ' ) : '' ) + 'Old URL: ' + curLink.href;
                    curLink.href = newHref;
                }
            }
        }
    },
    false
);


----добавлено-------
эх, работать-то работает, но... теперь нельзя использовать настройку скрипта

Выделить код

Код:

var useSeparateLink = false/true;

которя говорит скрипту заменять ли ссылку очищенной или генерить рядом чистую ссылку. Теперь ВКонтакте такая картина, при каждом наведении мыша генерицца новый значек очищенной ссылки :sick:
http://savepic.ru/5769945m.jpg
надо какой-то счетчик что-ле... или вообще на другое событие какое, низнаю. эхъ...

Отредактировано HaGEN (11-09-2014 08:38:40)

Отсутствует

 

№304-11-2014 02:53:37

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Opera 12.1

Re: Clean-URl.js заставить работать на подгружаемых страницах.

ну в общем уже пользуюсь и отпишу сюдой. Событие вписал 'click' (заместо 'mouseover') и просто в скриптег теперь нужно прописать адреса тех страниц где "подгрузка" - всекте, одноглазнике и прочие которые попадают под регулярку данного скрипта. При клике на ссылке скрипт запускаецца и очищает ссылку, переход по чистой без редиректа.
ну вроде всё. Спасибо всем. В особенности TarquinWJ за отличный код который и спустя годы прекрасно работает и в других бравзерах. Отэта правильное гунфу!
Можно закрыть, ибо фсё :/

Отредактировано HaGEN (04-11-2014 02:57:12)

Отсутствует

 
  • Форумы
  •  » Скрипты
  •  » Clean-URl.js заставить работать на подгружаемых страницах.

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]