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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.
  • Форумы
  •  » Firefox
  •  » Расширение для замены участков html кода страницы

№112-12-2015 16:33:47

alarm23
Участник
 
Группа: Members
Зарегистрирован: 02-02-2014
Сообщений: 6
UA: Firefox 42.0

Расширение для замены участков html кода страницы

Приветствую.
Интересует существует ли аддон (расширение), которое бы позволило заменять участок HTML-кода страницы и в дальнейшем - уже отображать страницу с измененным кодом. Например, есть сайт (чужой), который визуально нам не нравится. Нужно отредактировать ХТМЛ и сделать так, чтобы браузер запомнил правку и в дальнейшем при загрузке страницы - использовал наш шаблон правки.
Пробовал для этой цели использовать аддон FoxReplace. Он отлично справляется с небольшими элементами кода (можно менять фразы в тексте и т.д.), однако, не справляется при попытке заменять более крупные участки кода. Например такого размера:

скрытый текст
<td style='vertical-align:middle; text-align: center;'>256</td>
                    <td style='vertical-align:middle; text-align: center;'>458</td>
                    <td style='vertical-align:middle; text-align: center;' class="talir orig-pre" data-pre="0" data-orig="0">156</td>
                    <td style='vertical-align:middle; text-align: center;' class="talir orig-pre" data-pre="0" data-orig="0">789</td>
                    <td style='vertical-align:middle; text-align: center;'>478</td>
                    <td style='vertical-align:middle; text-align: center;'>745</td>
                    <td style='vertical-align:middle; text-align: center;'>479</td>
                    <td style='vertical-align:middle; text-align: center;'>759</td>
                    <td style='vertical-align:middle; text-align: center;'>389</td>
                    <td style='vertical-align:middle; text-align: center;'>165</td>
                    <td style='vertical-align:middle; text-align: center;'>649</td>
                    <td style='vertical-align:middle; text-align: center;'>831</td>

GreaseMonkey мне не подойдет, т.к. я не силен в Java-программировании, да и задача довольно простая - сохранить правки кода после обновления страницы (разумеется, без изменения страницы на сервере). Найти готовый скрипт также не удалось, который бы корректно справлялся с задачей.

Какие еще инструменты есть для этой задачи, кроме FoxReplace и GreaseMonkey?

Отредактировано alarm23 (12-12-2015 16:38:53)

Отсутствует

 

№212-12-2015 16:52:14

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Расширение для замены участков html кода страницы

Скрипт Lex1 для GM Вызов: alt+shift+X (или B) разные способы вырезания.

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

Выделить код

Код:

==UserScript==
 @name AdBlock+
 @author Lex1
 @version 1.3.14
 @include *
 @run-at document-start
 @description Css AdBlock. Press Alt+Shift+A for blocking ads and Alt+Shift+U for unblocking. Press Alt+Shift+E for editing styles.
 @license GPL 3
 ==/UserScript==
(function(){
    var style, enabled = false, prefix = 'ujs_adblock';
    var none = '{display: none !important;}', highlight = '{background-color: #FF5555 !important; outline: 1px solid #FF1111 !important; opacity: 0.7 !important;}', padding = 'iframe, embed, object{padding-left: 16px !important; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAQAAABHeoekAAAAc0lEQVQY02P4z4AfMlBPAQMzAzNWNlwIRPEygAA7mM3JgGYCL5gSgUrrMCgwsKEqYABKwjg6DGog09AVMDCIgZmmEGlMBexwjiREPaoCmN3GULegKoD6AmI3xC0C6CZwMijD7AZKamLzBRsQwgCYTZ24AAD8Zqzk4ASGSwAAAABJRU5ErkJggg==") no-repeat scroll 0 0 !important;}';

    var getValue = function(name){
        if(window.localStorage){
            return window.localStorage.getItem(name) || '';
        }else{
            var eq = name+'=', ca = document.cookie.split(';');
            for(var i = ca.length; i--;){
                var c = ca[i];
                while(c.charAt(0) == ' ')c = c.slice(1);
                if(c.indexOf(eq) == 0)return unescape(c.slice(eq.length));
            };
            return '';
        }
    };
    var setValue = function(name, value, del){
        if(window.localStorage){
            if(del){window.localStorage.removeItem(name)}else{window.localStorage.setItem(name, value)};
        }else{
            if(document.cookie.split(';').length < 30 && document.cookie.length-escape(getValue(name)).length+escape(value).length < 4000){
                var date = new Date();
                date.setTime(date.getTime()+((del ? -1 : 10*365)*24*60*60*1000));
                document.cookie = name+'='+escape(value)+'; expires='+date.toGMTString()+'; path=/';
            }else{
                alert('Cookies are full!');
            }
        }
    };
    var delEle = function(ele){
        if(ele && ele.parentNode)ele.parentNode.removeChild(ele);
    };
    var addStyle = function(css){
        var s = document.createElement('style');
        s.setAttribute('type', 'text/css');
        s.setAttribute('style', 'display: none !important;');
        s.appendChild(document.createTextNode(css));
        return (document.getElementsByTagName('head')[0] || document.documentElement).appendChild(s);
    };
    var replaceStyle = function(ele, css){
        if(ele){
            while(ele.firstChild)ele.removeChild(ele.firstChild);
            ele.appendChild(document.createTextNode(css));
        }
    };
    var splitCss = function(css){
        var rez = [];
        css.replace(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/g, function(s, m){rez.push(m.replace(/^\s+|\s+$/g, ''))});
        return rez;
    };
    var clearCss = function(css){
        var a = splitCss(css);
        for(var i = a.length; i--;){
            var rule = a[i]+'>';
            for(var j = a.length; j--;){
                if(a[j].indexOf(rule) == 0)a.splice(j, 1);
            }
        };
        return a.join(',');
    };
    var delCss = function(css, del){
        var a = splitCss(css);
        if(del){
            for(var i = a.length; i--;){
                if(del.indexOf(a[i]) == 0)a.splice(i, 1);
            }
        }else{
            a.pop();
        };
        return a.join(',');
    };
    var getCssRule = function(el, wide){
        var getNth = function(el){
            var nth, n = 0, p = el.parentNode;
            for(var i = 0, c; c = p.childNodes[i]; i++){if(c.nodeType == 1){n++; if(c == el)nth = n}};
            return (!nth || n < 2) ? '' : ':nth-child('+nth+')';
        };
        var getAtt = function(el, tags){
            var rez = '';
            if(el.attributes){
                var r = new RegExp('^('+tags+')$');
                for(var i = 0, a; a = el.attributes[i]; i++){
                    var n = a.nodeName.toLowerCase();
                    if(r.test(n))rez += '['+n+'=\x22'+a.nodeValue.replace(/[\x22\x5C]/g, '\\$&').replace(/[\x01-\x1F\x7F]/g, function(s){return '\\'+s.charCodeAt(0).toString(16)+' '})+'\x22]';
                }
            };
            return rez;
        };
        var att, tag, rez = [];
        var ver = document.querySelectorAll ? 10 : (window.postMessage ? 9.5 : (window.getSelection ? 9 : 8));
        while(el){
            if(el.nodeType == 1){
                tag = el.nodeName;
                att = getAtt(el, 'src') || getAtt(el, 'href');
                if(att){
                    rez.unshift(tag+((wide && ver >= 9) ? att.replace(/^(\[\w+)(=\x22https?:\/\/)([^?#]+\/[^?#]+\/|[^?#]+).*(\x22\])$/i, '$1^$2$3$4') : att));
                    break;
                }else{
                    att = getAtt(el, 'id|class|height|width|color|bgcolor'+(ver >= 9 ? '|align|valign|type' : ''));
                    rez.unshift(tag+att+((wide != false || ver < 9.5 || /^(html|body)$/i.test(tag)) ? '' : getNth(el)));
                    if(wide && att && (ver >= 10 ? document.querySelectorAll(tag+att).length == 1 : /\[id=\x22.*?\x22\]|\[class=\x22.*?\x22\]\[|\]\[class=\x22.*?\x22\]/.test(att)))break;
                }
            };
            el = el.parentNode;
        };
        return rez.join('>');
    };
    var setBlockStyle = function(){
        if(document.documentElement && document.documentElement.nodeName.toLowerCase() == 'html'){
            var css = getValue(prefix);
            if(css)style = addStyle(css+none);
            return true;
        }
    };

    var editStyles = function(){
        var rez = prompt(window.navigator.language.slice(0, 2) == 'ru' ? '\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043E\u0442\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0442\u0438\u043B\u0438:' : 'Please, edit styles:', getValue(prefix));
        if(rez != null){
            setValue(prefix, rez);
            if(rez)rez += none;
            if(style){replaceStyle(style, rez)}else{style = addStyle(rez)};
        }
    };
    var unblockEle = function(latest){
        var padCss, css = getValue(prefix);
        if(enabled || !style || !css)return;

        var remove = function(){
            document.removeEventListener('click', click, false);
            document.removeEventListener('keyup', press, false);
            delEle(padCss);
            enabled = false;
        };
        var click = function(ev){
            ev.preventDefault();
            var oldCss = getValue(prefix);
            var css = delCss(oldCss, getCssRule(ev.target, false));
            if(css == oldCss)css = delCss(oldCss, getCssRule(ev.target, null));
            if(css == oldCss)css = delCss(oldCss, getCssRule(ev.target, true));
            if(css != oldCss)setValue(prefix, css);
            replaceStyle(style, css ? css+(ev.shiftKey ? highlight : none) : '');
            if(!ev.shiftKey)remove();
        };
        var press = function(ev){
            if(ev.keyCode == 27){
                var css = getValue(prefix);
                replaceStyle(style, css ? css+none : '');
                remove();
            }
        };

        if(latest){
            css = delCss(css);
            setValue(prefix, css);
            replaceStyle(style, css ? css+none : '');
        }else{
            enabled = true;
            padCss = addStyle(padding);
            replaceStyle(style, css+highlight);
            document.addEventListener('click', click, false);
            document.addEventListener('keyup', press, false);
        }
    };
    var blockEle = function(wide){
        if(enabled)return;
        var css, tmpCss, padCss, ele, outline = '', bgColor = '', title = '';

        var remove = function(){
            document.removeEventListener('mouseover', over, false);
            document.removeEventListener('mouseout', out, false);
            document.removeEventListener('click', click, false);
            document.removeEventListener('keyup', press, false);
        };
        var quit = function(){
            delEle(tmpCss);
            delEle(padCss);
            enabled = false;
        };
        var over = function(ev){
            ele = ev.target;
            title = ele.title;
            ele.title = 'Tag: '+ele.nodeName+(ele.id ? ', ID: '+ele.id : '')+(ele.className ? ', Class: '+ele.className : '');
            outline = ele.style.outline;
            ele.style.outline = '1px solid #306EFF';
            bgColor = ele.style.backgroundColor;
            ele.style.backgroundColor = '#C6DEFF';
        };
        var out = function(){
            if(ele){
                ele.title = title;
                ele.style.outline = outline;
                ele.style.backgroundColor = bgColor;
            }
        };
        var click = function(ev){
            if(ele){
                ev.preventDefault();
                out();
                var rules, rule = getCssRule(ele, !wide != !ev.altKey);
                css = css ? (css != (rules = delCss(css, rule)) ? (ev.shiftKey ? rules : css) : css+','+rule) : rule;
                if(tmpCss){replaceStyle(tmpCss, css+highlight)}else{tmpCss = addStyle(css+highlight)};
                if(!ev.shiftKey){
                    remove();
                    css = prompt(window.navigator.language.slice(0, 2) == 'ru' ? '\u0417\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442?' : 'Block this element(s)?', css);
                    if(css){
                        rules = getValue(prefix);
                        if(rules)css = clearCss(rules+','+css);
                        setValue(prefix, css);
                        if(style){replaceStyle(style, css+none)}else{style = addStyle(css+none)};
                    };
                    quit();
                }
            }
        };
        var press = function(ev){
            if(ev.keyCode == 27){
                out();
                remove();
                quit();
            }
        };

        enabled = true;
        padCss = addStyle(padding);
        document.addEventListener('mouseover', over, false);
        document.addEventListener('mouseout', out, false);
        document.addEventListener('click', click, false);
        document.addEventListener('keyup', press, false);
    };


    // Set style at loading a page (with workaround for Opera 8)
    if(!setBlockStyle())window.addEventListener('load', setBlockStyle, false);

    // Hotkeys
    document.addEventListener('keydown', function(e){
        if(e.shiftKey && !e.ctrlKey && e.altKey){
            switch(e.keyCode){
                // Edit styles with Alt+Shift+E
                case 69: editStyles(); break;
                // Unblock elements with Alt+Shift+U
                case 85: unblockEle(); break;
                 // Block element with Alt+Shift+B
                case 66: blockEle(); break;
                // Unblock latest element with Alt+Shift+L
                case 76: unblockEle(true); break;
                 // Block elements (don't use nth-child) with Alt+Shift+A
                //case 65: blockEle(true); break;
                // Alt+Shift+X
                case 88: blockEle(true); break;
            }
        }
    }, false);

    // For buttons
    window.navigator[prefix] = {block: blockEle, edit: editStyles, unblock: unblockEle};
})();

Отсутствует

 

№312-12-2015 17:35:25

alarm23
Участник
 
Группа: Members
Зарегистрирован: 02-02-2014
Сообщений: 6
UA: Firefox 42.0

Re: Расширение для замены участков html кода страницы

Включил GM. Попробовал запустить скрипт, но никакой реакции.
Куда нужно вставить данный код скрипта, чтобы его запустить?

Отсутствует

 

№412-12-2015 22:11:40

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Расширение для замены участков html кода страницы

В голову!

Отсутствует

 

№512-12-2015 23:25:31

nabigator
Забанен
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 72
UA: Firefox 42.0

Re: Расширение для замены участков html кода страницы

Речь о внешнем виде сайта? Тогда просто userContent.css, без всяких расширений.

Отсутствует

 

№612-12-2015 23:57:07

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Расширение для замены участков html кода страницы

nabigator пишет

Тогда просто userContent.css, без всяких расширений.

верняк. Даже батон есть для этого:
перегрузить (userContent|Chrome).css

Отсутствует

 

№713-12-2015 07:04:50

alarm23
Участник
 
Группа: Members
Зарегистрирован: 02-02-2014
Сообщений: 6
UA: Firefox 42.0

Re: Расширение для замены участков html кода страницы

jars пишет

В голову!

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

Отсутствует

 

№813-12-2015 08:25:11

alarm23
Участник
 
Группа: Members
Зарегистрирован: 02-02-2014
Сообщений: 6
UA: Firefox 42.0

Re: Расширение для замены участков html кода страницы

Разобрался со скриптом. Скрипт действительно рабочий, но, к сожалению, поставленной задачи не выполняет.
Еще раз повторю суть задачи. Она донельзя простая.
1. Есть веб-страница стороннего (не нашего) сайта.
2. Мы правим HTML код этой страницы с помощью firebug. Но эти правки, естественно, сбрасываются при обновлении страницы, так как идет новый запрос к серверу, где эти правки не учтены.
3. Нужно, чтобы при обновлении этой страницы визуально (т.е. на стороне клиента, а не сервера, ибо доступа к нему нет) сохранялись те правки, которые мы внесли на п.2.
Частично с этой задачей справляется аддон FoxReplace. Однако, он заменяет лишь отдельные элементы текста, но весь ХТМЛ код страницы подменить не получается. Хотя в настройках данного аддона специально включал опцию замены ХТМЛ.

Неужели нет никаких плагинов/инструментов для решения данной задачи? Уже не спрашиваю относительно Firefox. Задача актуальна независимо от браузера. Задача-то простая и многим эта функция была бы полезной. Уже несколько дней ищу решение - безрезультатно.

Если таких решений нет в природе, то в принципе готов заказать оное за деньги. Но пока что хотелось бы найти нужное решение среди существующих. Кто-нибудь знает аналоги FoxReplace, потестирую их?

Отредактировано alarm23 (13-12-2015 08:39:22)

Отсутствует

 

№913-12-2015 14:27:18

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 14014
UA: Firefox 40.0
Веб-сайт

Re: Расширение для замены участков html кода страницы

тема в faq - ищу расширение (ищу дополнение)


Через сомнения приходим к истине. Цицерон

Отсутствует

 
  • Форумы
  •  » Firefox
  •  » Расширение для замены участков html кода страницы

Board footer

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