1 (изменено: DnsIs, 2011-08-15 14:53:40)

Тема: JS+bookmarklet: Не получается внедрить код букмарклета в страницу.

Доброго дня.
Такая вот проблема. Есть букмарклет готовый:

javascript:(function(){var%20isIe=false;/*@cc_on%20isIe=true;%20@*/function%20fe(a,fn){var%20i,l=a.length;for(i=0;i<l;i++){fn(a[i]);}};function%20ae(el,n,fn,ix){function%20wfn(ev){var%20el=(isIe?window.event.srcElement:ev.target);if(ix%20||%20!el.xmt)%20fn(el);}if%20(isIe){n='on'%20+%20n;el.attachEvent(n,%20wfn);}%20else%20{el.addEventListener(n,%20wfn,%20false);}if(!el.es)el.es=[];el.es.push(function(){if(isIe){el.detachEvent(n,wfn);}%20else%20{el.removeEventListener(n,%20wfn,%20false);}});el.re=function(){fe(el.es,function(f){f()});};}function%20sce(el){var%20oldclick=el.onclick,oldmu=el.onmouseup,oldmd=el.onmousedown;el.onclick=function(){return%20false;};el.onmouseup=function(){return%20false;};el.onmousedown=function(){return%20false;};el.rce=function(){el.onclick=oldclick;el.onmouseup=oldmu;el.onmousedown=oldmd;};}if%20(!window.r_)window.r_=[];var%20r=window.r_;var%20D=document;ae(D.body,'mouseover',%20function(el){el.style.backgroundColor='#ffff99';%20sce(el)});ae(D.body,'mouseout',%20%20function(el){el.style.backgroundColor='';if(el.rce)el.rce();});ae(D.body,'click',%20%20%20%20%20function(el){el.style.display='none';%20r.push(el);});function%20ac(p,tn,ih){var%20e=D.createElement(tn);if(ih)e.innerHTML=ih;p.appendChild(e);return%20e;}var%20p=0;var%20bx=ac(D.body,'div');bx.style.cssText='position:'+(isIe?'absolute':'fixed')+';padding:2px;background-color:#99FF99;border:1px%20solid%20green;z-index:9999;font-family:sans-serif;font-size:10px';function%20sp(){bx.style.top=(p&2)?'':'10px';bx.style.bottom=(p&2)?'10px':'';bx.style.left=(p&1)?'':'10px';bx.style.right=(p&1)?'10px':'';}sp();var%20ul=ac(bx,'a','%20Undo%20|');ae(ul,'click',function(){var%20e=r.pop();%20if(e)e.style.display='';},%20true);var%20ual=ac(bx,'a','%20Undo%20All%20|');ae(ual,'click',function(){var%20e;while(e=r.pop())e.style.display='';},%20true);var%20ml=ac(bx,'a','%20Move%20|');ae(ml,'click',function(){p++;sp();},%20true);var%20xl=ac(bx,'a','%20Exit%20');ae(xl,'click',function(){D.body.re();bx.parentNode.removeChild(bx);},%20true);fe([bx,ul,ml,xl,ual],function(e){e.style.curs

Хочу его вставить в свой скрипт. Как сделать сие действо? Видится мне, что что работает этот шайтан-код при нажатии хоткея.
Помогите пожалуйста.

Нас невозможно сбить с пути, нам пофигу куда идти.

2

Re: JS+bookmarklet: Не получается внедрить код букмарклета в страницу.

Код неполный. Проверьте на http://www.jsbeautifier.org/ завершенность кода.

( 2 * b ) || ! ( 2 * b )

3

Re: JS+bookmarklet: Не получается внедрить код букмарклета в страницу.

Rumata пишет:

Код неполный. Проверьте на http://www.jsbeautifier.org/ завершенность кода.

Вот это дааа, вот это ссылку вы подкинули. Я даже и не подозревал что есть такая великолепная вещь. Благодарствую. Поклон вам. А код действительно не полный, скопировал с помощью IE, он порезал все.
Вот полный код, уже обработанный.

javascript: (function () {
    var isIe = false; /*@cc_on isIe=true; @*/


    function fe(a, fn) {
        var i, l = a.length;
        for (i = 0; i < l; i) {
            fn(a[i]);
        }
    };

    function ae(el, n, fn, ix) {
        function wfn(ev) {
            var el = (isIe ? window.event.srcElement : ev.target);
            if (ix || !el.xmt) fn(el);
        }
        if (isIe) {
            n = 'on'
            n;
            el.attachEvent(n, wfn);
        } else {
            el.addEventListener(n, wfn, false);
        }
        if (!el.es) el.es = [];
        el.es.push(function () {
            if (isIe) {
                el.detachEvent(n, wfn);
            } else {
                el.removeEventListener(n, wfn, false);
            }
        });
        el.re = function () {
            fe(el.es, function (f) {
                f()
            });
        };
    }
    function sce(el) {
        var oldclick = el.onclick,
            oldmu = el.onmouseup,
            oldmd = el.onmousedown;
        el.onclick = function () {
            return false;
        };
        el.onmouseup = function () {
            return false;
        };
        el.onmousedown = function () {
            return false;
        };
        el.rce = function () {
            el.onclick = oldclick;
            el.onmouseup = oldmu;
            el.onmousedown = oldmd;
        };
    }
    if (!window.r_) window.r_ = [];
    var r = window.r_;
    var D = document;
    ae(D.body, 'mouseover', function (el) {
        el.style.backgroundColor = '#ffff99';
        sce(el)
    });
    ae(D.body, 'mouseout', function (el) {
        el.style.backgroundColor = '';
        if (el.rce) el.rce();
    });
    ae(D.body, 'click', function (el) {
        el.style.display = 'none';
        r.push(el);
    });

    function ac(p, tn, ih) {
        var e = D.createElement(tn);
        if (ih) e.innerHTML = ih;
        p.appendChild(e);
        return e;
    }
    var p = 0;
    var bx = ac(D.body, 'div');
    bx.style.cssText = 'position:' (isIe ? 'absolute' : 'fixed')';padding:2px;background-color:#99FF99;border:1px solid green;z-index:9999;font-family:sans-serif;font-size:10px';

    function sp() {
        bx.style.top = (p & 2) ? '' : '10px';
        bx.style.bottom = (p & 2) ? '10px' : '';
        bx.style.left = (p & 1) ? '' : '10px';
        bx.style.right = (p & 1) ? '10px' : '';
    }
    sp();
    var ul = ac(bx, 'a', ' Undo |');
    ae(ul, 'click', function () {
        var e = r.pop();
        if (e) e.style.display = '';
    }, true);
    var ual = ac(bx, 'a', ' Undo All |');
    ae(ual, 'click', function () {
        var e;
        while (e = r.pop()) e.style.display = '';
    }, true);
    var ml = ac(bx, 'a', ' Move |');
    ae(ml, 'click', function () {
        p;
        sp();
    }, true);
    var xl = ac(bx, 'a', ' Exit ');
    ae(xl, 'click', function () {
        D.body.re();
        bx.parentNode.removeChild(bx);
    }, true);
    fe([bx, ul, ml, xl, ual], function (e) {
        e.style.cursor = 'pointer';
        e.xmt = 1;
    });
})()

Пойду экспериментировать.

Нас невозможно сбить с пути, нам пофигу куда идти.

4

Re: JS+bookmarklet: Не получается внедрить код букмарклета в страницу.

Если вдруг кому то будет интересно.

Не стал заниматься модификацией кода, а просто сделал "универсальный" код, который мне подошел больше:

code = 'Код букмарклета'
location.replace(code);
Нас невозможно сбить с пути, нам пофигу куда идти.