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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№527626-11-2012 03:02:51

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher
Лучше и быть не может, спасибо

Отредактировано bunda1 (26-11-2012 03:03:20)

Отсутствует

 

№527726-11-2012 19:41:53

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 393
UA: Firefox 13.0

Re: Custom Buttons

Возможно ли это реализовать в виде пункта меню через кнопку?
спасибо

Отсутствует

 

№527826-11-2012 21:28:23

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Kiril__777 пишет

Возможно ли это реализовать в виде пункта меню через кнопку?
спасибо

24-05-2011 21:22:28
01-09-2011 17:39:05

Отсутствует

 

№527926-11-2012 21:48:25

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 393
UA: Firefox 13.0

Re: Custom Buttons

bunda1
спасибо за наводку, сразу не нашел их.

Еще вопросец: все возможности этих кнопок возможно затолкать в меню? И как добавить в контекстное меню вкладки "Остановить все вкладки", помнится где-то об этом уже писали.
Спасибо.

Отсутствует

 

№528026-11-2012 22:05:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Kiril__777 пишет

Еще вопросец: все возможности этих кнопок возможно затолкать в меню? И как добавить в контекстное меню вкладки "Остановить все вкладки", помнится где-то об этом уже писали.

Остановить все вкладки

Возможности этих кнопок возможно затолкать в меню, как тебе надо?

Выделить код

Код:

var contextMenu = document.getElementById("contentAreaContextMenu");
var newLabel = document.createElement("menuitem");
newLabel.setAttribute("label","Поиск по сайту(google)");
newLabel.setAttribute("id","searchToSite");
contextMenu.insertBefore(newLabel, document.getElementById("context-copy") );
document.getElementById("searchToSite").addEventListener("click", function(event) { searchToSite() }, false);
document.getElementById('contentAreaContextMenu').addEventListener('popupshowing', function(event) { 
       if ( event.target != event.currentTarget ) return;           
            document.getElementById("searchToSite").hidden = (document.commandDispatcher.focusedWindow.getSelection()== '');
}, false);


function searchToSite() {
     var text = document.commandDispatcher.focusedWindow.getSelection();
     var doc = getBrowser (). contentDocument;
     try { var url = doc. location. hostname }
     catch(e) { var url = "" };
     var text = escape (convertFromUnicode ("UTF-8", text));
     var url = encodeURIComponent (url);
     var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
     gBrowser.selectedTab = gBrowser.addTab(searchUrl);
};

Отредактировано bunda1 (26-11-2012 23:16:04)

Отсутствует

 

№528126-11-2012 22:25:57

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 16.0

Re: Custom Buttons

[Kiril__777
По поводу поиска по сайту, вроде еще была такая функция в кнопке жестом мыши, вот только не помню в какой, а поиск здесь как-то не очень мне понятно устроен, на запрос "жесты мыши" выдает одну страничку, и ни одной кнопки там нет.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№528226-11-2012 23:35:44

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Kiril__777
Ну и пример как добавить оригинальный пункт:

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

Выделить код

Код:

var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");
var parentEleMenu = nextEleMenu.parentNode;

var menuId = "context-ext-addon";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    parentEleMenu.removeChild(menuItem.previousElementSibling);
    parentEleMenu.removeChild(menuItem);
};

menuItem = document.createElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Поиск по текущему сайту");
menuItem.setAttribute("oncommand", "(function(){var getSel=function(w){var s,d=w.document;if(d.selection){var r=d.selection.createRange();s=r?r.text:''}else{s=d.getSelection().toString();if(!s){var e,t=d.getElementsByTagName('textarea'),u=d.getElementsByTagName('input'),i=t.length;while(e=(i>0)?t[--i]:u[-i--])try{if(e.offsetHeight>0&&(s=e.value.substring(e.selectionStart,e.selectionEnd)))break}catch(x){}}};if(!s)for(var j=0,f;f=w.frames[j];j++){try{if(s=getSel(f))break}catch(x){}};return s};var w=content,s=w.prompt('Поиск на этом сайте с помощью Google',getSel(w));if(s){w.open('http://www.google.com/search?as_q='+encodeURIComponent(s)+'&as_sitesearch='+w.location.hostname)}})()");
parentEleMenu.insertBefore(menuItem, nextEleMenu);

menuSeparator = document.createElement("menuseparator");
parentEleMenu.insertBefore(menuSeparator, nextEleMenu);


window просто меняется на content.

Отредактировано Lex1 (26-11-2012 23:42:32)

Отсутствует

 

№528326-11-2012 23:47:11

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Lex1
Может ты знаешь как получить адрес закладки по клику на заладке если закладки открыты в вкладе:

Выделить код

Код:

gBrowser.loadOneTab("chrome://browser/content/bookmarks/bookmarksPanel.xul", null, null, null, false, false)

ну и:

Выделить код

Код:

function onClick(e) {
       if ( e.button==0 && content.location.href == 'chrome://browser/content/bookmarks/bookmarksPanel.xul' ) {
            e.preventDefault();
            e.stopPropagation();      

            var target = e.target;
            alert(????);
           }
};
gBrowser.addEventListener('click', onClick, false);

Отредактировано bunda1 (26-11-2012 23:53:52)

Отсутствует

 

№528427-11-2012 01:49:37

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2148
UA: Firefox 10.0

Re: Custom Buttons

bunda1

Во, так вроде alert'ится...

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

Выделить код

Код:

function onClick(e) {
    if ( e.button==0 && content.location.href == 'chrome://browser/content/bookmarks/bookmarksPanel.xul' ) {
    e.preventDefault();
    e.stopPropagation();      

    var target = e.target;

    var row = {};
    var tree = target.parentNode;
    var tbo = tree.treeBoxObject;
    tbo.getCellAt(e.clientX, e.clientY, row, {}, {});
    var node = tree.view.nodeForTreeIndex(row.value);
    alert(node.uri);

    }
};
gBrowser.addEventListener('click', onClick, true);

this.onDestroy = function() {
    gBrowser.removeEventListener('click', onClick, true);
}

Отсутствует

 

№528527-11-2012 02:17:58

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Dumby
Ты просто гений, безграничное спасибо :beer:

Отсутствует

 

№528627-11-2012 06:46:39

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 393
UA: Firefox 13.0

Re: Custom Buttons

bunda1
Спасибо,

Остановить все вкладки

переместил через Инспектора DOM куда нужно, но после перезапуска браузера это не сохраняется, что поменять в самом коде для перемещения не догадался.
villa7
Жестами не пользуюсь, поэтому сразу отпадает, но на всякий случай запомню, может пригодится.
Lex1

Lex1 пишет

добавить оригинальный пункт

Просто супер, то что нужно, даже перемещать никуда не нужно.

Заметил, что пока кнопка в боковой панели не видна, то и пункта меню не видно.

Отредактировано Kiril__777 (27-11-2012 06:53:40)

Отсутствует

 

№528727-11-2012 15:41:49

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Kiril__777
А вот так можно перетащить всё подменю, (почти) без изменений в коде.

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

Выделить код

Код:

var itemsArr = [
    ["Искать страницу в кэше Google", function(){window.open('http://www.google.com/search?q=cache:'+location.href)}],
    ["Искать страницу на Archive.org", function(){window.open('http://web.archive.org/web/*/'+location.href)}],
    ,
    ["Искать логин на BugMeNot.com", function(){window.open('http://www.bugmenot.com/view/'+location.hostname,'BugMeNot_'+location.hostname,'width=500,height=400,left=100,top=100,scrollbars=yes,location=no')}],
    ["Проверить с помощью Dr.Web Online", function(){window.open('http://online.drweb.com/result?url='+escape(location.href),'DrWeb_'+location.href,'width=640,height=400,left=200,top=100,scrollbars=yes,location=no')}],
    ["Проверить доступность сайта", function(){window.open('http://downforeveryoneorjustme.com/'+location.hostname,'DownForMe_'+location.hostname,'width=600,height=400,left=100,top=100,scrollbars=yes,location=no')}],
    ,
    ["Поиск по текущему сайту", function(){var getSel=function(w){var s,d=w.document;if(d.selection){var r=d.selection.createRange();s=r?r.text:''}else{s=d.getSelection().toString();if(!s){var e,t=d.getElementsByTagName('textarea'),u=d.getElementsByTagName('input'),i=t.length;while(e=(i>0)?t[--i]:u[-i--])try{if(e.offsetHeight>0&&(s=e.value.substring(e.selectionStart,e.selectionEnd)))break}catch(x){}}};if(!s)for(var j=0,f;f=w.frames[j];j++){try{if(s=getSel(f))break}catch(x){}};return s};var w=window,s=w.prompt('Поиск на этом сайте с помощью Google',getSel(w));if(s){w.open('http://www.google.com/search?as_q='+encodeURIComponent(s)+'&as_sitesearch='+w.location.hostname)}}],
    ["Сгенерировать/показать пароль", function(){var getRandomPass=function(d){var chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';var rez='';var len=d>=3?d:3;while(rez.length<len){rez+=chars.charAt(Math.floor(Math.random()*chars.length))}return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$/.test(rez)?rez:arguments.callee(len)};var findPassEle=function(p){var c,s='',r=false,f=document.getElementsByTagName('form');for(var i=0;i<f.length;i++){c=f[i].elements;for(var j=0,e;e=c[j];j++){if(e.type=='password'){r=true;if(p){e.value=p;e.focus()}else if(e.value)s+='\n\n'+e.value}}};return r?s:null};var s=findPassEle();if(s){alert('На этой странице уже имеется пароль:'+s)}else{findPassEle(prompt('Пароль сгенерирован'+(s==null?':':'. Вставить?'),getRandomPass(12)))}}],
    ["Показать ссылки на Flash/Video", function(){var getVideo=function(flashvars,src){var getLink=function(s){var a=s.match(/[^\s\x22=&?]+\.[^\s\x22=&?\/]*(flv|mp4)/i);return a?a[0]:''};var getQuery=function(s,q){var a=s.match(new RegExp('(^|[&?])'+q+'=([^&]+)'));return a?a[2]:''};var getJson=function(s,q){var a=s.match(new RegExp('\x22'+q+'\x22:\\s*(\x22.+?\x22)'));return a?eval(a[1]):''};var getURL=function(f,s){return f.match(/^(\w+:\/\/|\/|$)/)?f:s.replace(/[#?].*$/,'').replace(/[^\/]*$/,f)};var decodeURL=function(s){try{return decodeURIComponent(s)}catch(e){return unescape(s)}};var q='',url=location.href,flv=decodeURL(flashvars);if(url.indexOf('youtube.com/watch?')!=-1&&(q=getQuery(flv,'url')))return decodeURL(q)+'&signature='+getQuery(flv,'sig')+'&title='+encodeURIComponent(document.title);if(url.indexOf('video.google.com/videoplay?')!=-1&&(q=getQuery(src,'videoUrl')))return decodeURL(q);if(url.indexOf('metacafe.com/watch/')!=-1&&(q=getJson(flv,'mediaURL')))return q+'?__gda__='+getJson(flv,'value');if(url.indexOf('dailymotion.com/')!=-1&&(q=getJson(flv,'hqURL')||getJson(flv,'sdURL')))return q;if(url.indexOf('www.break.com/')!=-1&&(q=getQuery(flv,'videoPath')))return q+'?'+getQuery(flv,'icon');if(url.indexOf('my-hit.ru/film/')!=-1&&(q=getLink(flv)))return q+'?start=0&id='+getQuery(flv,'id');return getURL(getLink(flv)||decodeURL(getLink(src)),src)};var createLink=function(url,txt){var oLnk=document.createElement('a');oLnk.setAttribute('href',url);oLnk.setAttribute('style','display:inline;margin:0;padding:0;font:14px Times New Roman;text-decoration:underline;text-transform:none;');oLnk.appendChild(document.createTextNode(txt));return oLnk};var showLink=function(oEle,src,flv){var cName='ujs_downlink';var p=oEle.previousSibling;if(p&&p.className==cName){oEle.parentNode.removeChild(p);return};if(src){var oDiv=document.createElement('div');oDiv.setAttribute('style','display:block;position:static;float:none;margin:0;padding:0;width:auto;height:auto;font:14px Times New Roman;color:#555;z-index:999;');oDiv.className=cName;oDiv.appendChild(createLink(src,'Download'));var v=getVideo(flv,src);if(v){oDiv.appendChild(document.createTextNode(' ('));oDiv.appendChild(createLink(v,'Video'));oDiv.appendChild(document.createTextNode(')'))};oEle.parentNode.insertBefore(oDiv,oEle)}};var getParam=function(e,n){var v='',r=new RegExp('^('+n+')$','i');var param=e.getElementsByTagName('param');for(var i=0,p;p=param[i];i++){if(r.test(p.getAttribute('name'))){v=p.getAttribute('value');break}};return v};var searchEmbed=function(w){if(!w)return;var obj=w.document.getElementsByTagName('object');for(var i=0,oi;oi=obj[i];i++){if(oi.parentNode)showLink(oi,oi.getAttribute('data')||oi.getAttribute('src')||getParam(oi,'movie|data|src|code|filename|url')||(oi.getElementsByTagName('embed').length&&oi.getElementsByTagName('embed')[0].getAttribute('src')),getParam(oi,'flashvars'))};var em=w.document.getElementsByTagName('embed');for(var i=0,ei;ei=em[i];i++){if(ei.parentNode&&ei.parentNode.nodeName.toLowerCase()!='object')showLink(ei,ei.getAttribute('src'),ei.getAttribute('flashvars'))};for(var j=0,f;f=w.frames[j];j++){try{arguments.callee(f)}catch(e){}}};searchEmbed(window)}],
    ,
    ["Информация о странице", function(){var meta='',scripts='',embed='',iframes='',cookies='';var corrUrl=function(url){if(!url)return'';var q=url.indexOf('?')+1;return((q&&url.length>50)?url.slice(0,q>50?q:50)+'\u2026':url)+'\n'};var fullUrl=function(url){var a=document.createElement('a');a.href=url;return url?corrUrl(a.href):''};var m=document.getElementsByTagName('meta');for(var i=0,mi;mi=m[i];i++){meta+=(mi.name?mi.name+': ':(mi.httpEquiv?mi.httpEquiv+': ':''))+mi.content+'\n'};var s=document.getElementsByTagName('script');for(var i=0,si;si=s[i];i++){if(si.src)scripts+=corrUrl(si.src)};var e=document.getElementsByTagName('embed');var o=document.getElementsByTagName('object');for(var i=0,ei;ei=e[i];i++){embed+=fullUrl(ei.getAttribute('src'))};for(var i=0,oi;oi=o[i];i++){var src=oi.getAttribute('data')||oi.getAttribute('src')||oi.getAttribute('source');if(!src){var params=oi.getElementsByTagName('param');for(var j=0,p;p=params[j];j++){if(p.hasAttribute('name')&&p.getAttribute('name').match(/^(movie|data|src|code|filename|url|source)$/i)){src=p.getAttribute('value');break}}};var lnk=fullUrl(src);if(embed.indexOf(lnk)==-1)embed+=lnk};var f=document.getElementsByTagName('iframe');for(var i=0,fi;fi=f[i];i++){if(fi.src)iframes+=corrUrl(fi.src)};var c=document.cookie.split(';');for(var i=0,ci;ci=c[i];i++){while(ci.charAt(0)==' ')ci=ci.slice(1);if(ci.length>40)ci=ci.slice(0,40)+'\u2026';cookies+=ci+'\n'};var lastmod=(Date.parse(document.lastModified)==0)?'':document.lastModified;var mode=document.getElementsByTagName('HTmL').length==0?'Really strict':(document.compatMode=='CSS1Compat'?'Normal strict':'Quirks');var title=document.title||(document.getElementsByTagName('title')[0]&&document.getElementsByTagName('title')[0].text)||'';if(meta)meta='\nMeta-данные:\n'+meta;if(scripts)scripts='\nСкрипты:\n'+scripts;if(embed)embed='\nВстроенные объекты:\n'+embed;if(iframes)iframes='\nIframes:\n'+iframes;if(cookies)cookies='\nCookies:\n'+cookies;alert('Идентификация браузера: '+navigator.userAgent+'\n\nЗаголовок: '+title+'\n\nАдрес: '+location.href+'\n\nРеферрер: '+document.referrer+'\n\nДата последнего изменения: '+lastmod+'\n\nРежим отображения: '+mode+' mode\n'+meta+scripts+embed+iframes+cookies)}],
    ["Исходный код (snapshot)", function(){var q='  ',C={img:1,br:1,link:1,input:1,hr:1,meta:1},u=false,v=0,D=1,g=window.document,m=window.location,w='resizable=yes,scrollbars=yes,location=no',h='</span></li>';var x=function(a){return'<span class=\'tag\'>&lt;'+a+''};var y=function(a){return(a?'/':'')+'&gt;</span>'};var z=function(a,b){if(b||C[a.toLowerCase()])return'';return'<span class=\'tag\'>&lt;/'+a+'&gt;</span>'};var j=function(){var a=v.toString();while(a.length<3)a='0'+a;return'<li class=\'line'+(D&&((v++)&1)?' dark\'':'\'')+'><span>'};var n=function(a){return a.replace(/</g,'&lt;').replace(/>/g,'&gt;')};var E=function(a){var b=a.doctype,c='';if(b){c=j()+x('!DOCTYPE')+' <span class=\'attrDoc\'>'+b.nodeName+(b.publicId?' PUBLIC \''+b.publicId+'\'':'')+(b.systemId?'</span></span>'+h+j()+'<span class=\'tag\'><span class=\'attrDoc\'>'+q+'\''+b.systemId+'\'':'')+'</span>'+y()+h}return c};var F=function(a){var b=a.attributes,c=null,d='';for(var f=0;c=b[f];f++){if(c.specified&&c.value){d+=' <span class=\'attrTitle\'>'+c.name+'</span>=<span class=\'attrValue\'>\x22'+n(c.value.replace(/\t/g,q))+'\x22</span> '}}return d};var r=function(a){return n(a.nodeValue.replace(/[\n\t\r\u00A0]+ */g,'').replace(/ +/g,' '))};var G=function(a){var b=0,c='';while(b<a){c+=q;b++}return c};var A=function(a,b,c){var d='',f=G(b++);switch(a.nodeType){case 1:{var i=a.childNodes,k=null;var s=(i.length==0)||(i.length==1&&i[0].nodeType==3);var t=u&&i.length==0;var l=j()+f+x(a.nodeName)+F(a)+y(t);if(!s)l+=h;for(var B=0;k=i[B];B++){l+=A(k,b,!s&&k.nodeType==3)}if(s){l+=(a.nodeName.toLowerCase()=='textarea'?n(a.value):'')+z(a.nodeName,t)+h}else{l+=j()+f+z(a.nodeName,t)+h}return l}case 3:{if((d=r(a))&&c){return j()+f+d+h}else{return d}}case 4:{d=r(a);return j()+f+'<span class=\'cdata\'>&lt;![CDATA[</span>'+d+'<span class=\'cdata\'>]]&gt;</span>'+h}case 8:{d=r(a);return j()+f+'<span class=\'comment\'>&lt;!--'+d+'--&gt;</span>'+h}}return a.nodeType};var H=function(a){var b,c='';if(a){var d=a.getSelection().getRangeAt(0),f=d.commonAncestorContainer;if(f.nodeType==3||f.nodeType==4)f=f.parentNode;b=f.cloneNode(false);b.appendChild(d.cloneContents());var i=d.startContainer,k=d.endContainer;if(i!=f.firstChild||(i.nodeType==3&&d.startOffset!=0))b.insertBefore(g.createTextNode('\u2026'),b.firstChild);if(k!=f.lastChild||(k.nodeType==3&&d.endOffset!=k.nodeValue.length))b.appendChild(g.createTextNode('\u2026'))}else{c=E(g);b=g.documentElement};c+=A(b,0);return c};var I=function(a){if(a&&a.getSelection){if(a.getSelection().toString())return a;for(var b=0,c,d;c=a.frames[b];b++){try{if(d=arguments.callee(c))return d}catch(e){}}}};var o=I(window);if(o){g=o.document;m=o.location;w+=',width=800,height=500,left=100,top=100'};u=/[a-z]/.test(g.documentElement.nodeName);var J='<!DOCTYPE html PUBLIC><html><head><title>Snapshot: '+((g.getElementsByTagName('title').length&&n(g.getElementsByTagName('title')[0].text))||(m.protocol+'//'+m.host+m.pathname))+'</title><style type=\'text/css\'>body{padding:0 5px;margin:0;font-family:sans-serif;font-size:.7em;background-color:#FFF;color:#000;}#content{white-space:pre-wrap}ol{color:#999;}span{color:#000}.tag{color:#05F}.attrTitle{color:#E00}.attrValue{color:#C0C}.attrDoc{color:#800080}.comment{color:#008000}.cdata{color:#63D}.line{margin:0;padding:0}.dark{background-color:#FAFAFA}</style></head><body><ol id=\'content\'>'+H(o)+'</ol></body></html>';var p=window.open('about:blank','_blank',w);p.document.write(J);p.document.onkeydown=function(a){if(a.keyCode==27)p.close()};p.document.close()}],
    ,
    ["Шахматы", function(){window.open('data:text/html;base64,PGh0bWw+PGhlYWQ+PHRpdGxlPkNoZXNzPC90aXRsZT48bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9Ik9zY2FyIFRvbGVkbyBHLiI+PG1ldGEgbmFtZT0ic2l0ZSIgY29udGVudD0iaHR0cDovL25hbm9jaGVzcy4xMTBtYi5jb20vY2hlc3M0Lmh0bWwiPjwvaGVhZD48Ym9keT48c2NyaXB0PnZhciBCLGkseSx1LGIsST1bXSxHPTEyMCx4PTEwLHo9MTUsTT0xZTQsbD1bNSwzLDQsNiwyLDQsMyw1LDEsMSwxLDEsMSwxLDEsMSw5LDksOSw5LDksOSw5LDksMTMsMTEsMTIsMTQsMTAsMTIsMTEsMTMsMCw5OSwwLDMwNiwyOTcsNDk1LDg0NiwtMSwwLDEsMiwyLDEsMCwtMSwtMSwxLC0xMCwxMCwtMTEsLTksOSwxMSwxMCwyMCwtOSwtMTEsLTEwLC0yMCwtMjEsLTE5LC0xMiwtOCw4LDEyLDE5LDIxXTtmdW5jdGlvbiBYKHcsYyxoLGUsUyxzKXt2YXIgdCxvLEwsRSxkLE89ZSxOPS1NKk0sSz03OC1oPDx4LHAsZyxuLG0sQSxxLHIsQyxKLGE9eT8teDp4O3lePTg7RysrO2Q9d3x8cyYmcz49aCYmWCgwLDAsMCwyMSwwLDApPk07ZG97aWYobz1JW3A9T10pe3E9byZ6Xnk7aWYocTw3KXtBPXEtLSYyPzg6NDtDPW8tOSZ6P1s1Myw0Nyw2MSw1MSw0Nyw0N11bcV06NTc7ZG97cj1JW3ArPWxbQ11dO2lmKCF3fHA9PXcpe2c9cXxwK2EtUz8wOlM7aWYoIXImKCEhcXxBPDN8fCEhZyl8fChyKzEmel55KT45JiZxfEE+Mil7aWYobT0hKHItMiY3KSlyZXR1cm4geV49OCxJW0ctLV09TyxLO0o9bj1vJno7RT1JW3AtYV0mejt0PXF8RS03P246KG4rPTIsNl55KTt3aGlsZShuPD10KXtMPXI/bFtyJjd8MzJdLWgtcTowO2lmKHMpTCs9KDEtcT9sWyhwLXAleCkveCszN10tbFsoTy1PJXgpL3grMzddK2xbcCV4KzM4XSoocT8xOjIpLWxbTyV4KzM4XSsobyYxNikvMjohIW0qOSkrKCFxPyEoSVtwLTFdXm4pKyEoSVtwKzFdXm4pK2xbbiY3fDMyXS05OSshIWcqOTkrKEE8Mik6MCkrIShFXnleOSk7aWYocz5ofHwxPHMmcz09aCYmTD56fGQpe0lbcF09bixJW09dPW0/KElbZ109SVttXSxJW21dPTApOmc/SVtnXT0wOjA7TC09WChzPmh8ZD8wOnAsTC1OLGgrMSxJW0crMV0sSj1xfEE+MT8wOnAscyk7aWYoIShofHxzLTF8Qi1PfGktbnxwLWJ8TDwtTSkpcmV0dXJuIFcoKSxHLS0sdT1KO0o9cS0xfEE8N3x8bXx8IXN8ZHxyfG88enx8WCgwLDAsMCwyMSwwLDApPk07SVtPXT1vO0lbcF09cjttPyhJW21dPUlbZ10sSVtnXT0wKTpnP0lbZ109OV55OjB9aWYoTD5OfHxzPjEmJkw9PU4mJiFoJiZNYXRoLnJhbmRvbSgpPC41KXtJW0ddPU87aWYocz4xKXtpZihoJiZjLUw8MClyZXR1cm4geV49OCxHLS0sTDtpZighaClpPW4sQj1PLGI9cH1OPUx9bis9Snx8KGc9cCxtPXA8Tz9nLTM6ZysyLElbbV08enxJW20rTy1wXXx8SVtwKz1wLU9dKT8xOjB9fX19d2hpbGUoIXImcT4yfHwocD1PLHF8QT4yfG8+eiYhciYmKytDKi0tQSkpfX19d2hpbGUoKytPPjk4P089MjA6ZS1PKTtyZXR1cm4geV49OCxHLS0sTitNKk0mJk4+LUsrMTkyNHxkP046MH1CPWk9eT11PTA7d2hpbGUoQisrPDEyMClJW0ItMV09QiV4P0IveCV4PDJ8QiV4PDI/NzpCL3gmND8wOmxbaSsrXXwxNjo3O2ZvcihhPSI8dGFibGUgY2VsbHNwYWNpbmc9MCBhbGlnbj1jZW50ZXIgYm9yZGVyPTA+IixCPTA7Qjw4O0IrKylmb3IoYSs9Ijx0cj4iLGk9MjE7aTwyOTtpKyspYSs9Ijx0ZCB3aWR0aD02MCBoZWlnaHQ9NjAgb25jbGljaz1ZKCIrKEIqeCtpKSsiKSBpZD1vIisoQip4K2kpKyIgc3R5bGU9J2xpbmUtaGVpZ2h0OjUwcHg7Zm9udC1zaXplOjUwcHg7Ym9yZGVyOjJweCBzb2xpZCAiKyIjZTBlMGYwJyBiZ2NvbG9yPSMiKyhpK0ImMT8iZjBmIjoiYzBjIikrIjBmMCBhbGlnbj1jZW50ZXI+IjthKz0iPHRyPjx0ZCBjb2xzcGFuPTggYWxpZ249Y2VudGVyPjxzZWxlY3QgaWQ9dCBzdHlsZT0nZm9udC1zaXplOjIwcHgnPjxvcHRpb24+JiM5ODE5OzxvcHRpb24+Ijtkb2N1bWVudC53cml0ZShhKyImIzk4MjA7PG9wdGlvbj4mIzk4MjE7PG9wdGlvbj4mIzk4MjI7PC9zZWxlY3Q+PC90YWJsZT4iKTtmdW5jdGlvbiBXKCl7Qj1iO2ZvcihwPTIxO3A8OTk7cCs9cCV4LTg/MTozKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibyIrcCkuaW5uZXJIVE1MPSJceGEwXHUyNjVmXHUyNjVhXHUyNjVlXHUyNjVkXHUyNjVjXHUyNjViICBcdTI2NTlcdTI2NTRcdTI2NThcdTI2NTdcdTI2NTZcdTI2NTUiLmNoYXJBdChJW3BdJnopO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvIitwKS5zdHlsZS5ib3JkZXJDb2xvcj1wPT1CPyJyZWQiOiIjZTBlMGYwIn19VygpO2Z1bmN0aW9uIFkocyl7aT0oSVtzXV55KSZ6O2lmKGk+OCl7Yj1zO1coKX1lbHNlIGlmKEImJmk8OSl7Yj1zO2k9SVtCXSZ6O2lmKChpJjcpPT0xJihiPDI5fGI+OTApKWk9MTQtZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInQiKS5zZWxlY3RlZEluZGV4Xnk7WCgwLDAsMCwyMSx1LDEpO2lmKHkpd2luZG93LnNldFRpbWVvdXQoIlgoMCwwLDAsMjEsdSwyLypwbHkqLyksWCgwLDAsMCwyMSx1LDEpIiwyNTApfX08L3NjcmlwdD48L2JvZHk+PC9odG1sPgo=','_blank','width=600,height=550,left=200,top=100')}]
];
var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-addon";
var menuItem, menuPopup, menu = document.getElementById(menuId);
if (menu) {
    contextMenu.removeChild(menu.previousElementSibling);
    contextMenu.removeChild(menu);
};
menuPopup = document.createElement("menupopup");
menu = document.createElement("menu");
menu.setAttribute("id", menuId);
menu.setAttribute("label", "Дополнительно");

for (var i = 0; i < itemsArr.length; i++) {
    if (itemsArr[i]) {
        menuItem = document.createElement("menuitem");
        menuItem.setAttribute("label", itemsArr[i][0]);
        menuItem.addEventListener("command", (function(f){return function(){content.location.href = "javascript:(" + encodeURI(f) + ")()"}})(itemsArr[i][1].toString()), false);
    } else {
        menuItem = document.createElement("menuseparator");
    };
    menuPopup.appendChild(menuItem);
};
menu.appendChild(menuPopup);

contextMenu.insertBefore(menu, nextEleMenu);
contextMenu.insertBefore(document.createElement("menuseparator"), nextEleMenu);

Отредактировано Lex1 (28-11-2012 13:28:25)

Отсутствует

 

№528827-11-2012 16:13:13

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: IE 9.0

Re: Custom Buttons

Lex1 пишет

А вот так можно перетащить всё подменю, без изменений в коде.

А вот это

Открыть текущую страницу в Opera

Выделить код

Код:

var page = gBrowser.currentURI;
var browser = "/usr/bin/opera";

var file =  Components.classes["@mozilla.org/file/local;1"]
                      .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(browser);

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, [page.spec], 1);
return true;


пунктом меню сделать можно?

Отсутствует

 

№528927-11-2012 16:45:13

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Если речь про код выше, то воткнуть перед menu.appendChild(menuPopup);

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

Выделить код

Код:

menuItem = document.createElement("menuitem");
    menuItem.setAttribute("label", "open in opera");
    menuItem.addEventListener("click", function() {
        var page = gBrowser.currentURI;
        var browser = "/usr/bin/opera";

        var file =  Components.classes["@mozilla.org/file/local;1"]
                              .createInstance(Components.interfaces.nsILocalFile);
        file.initWithPath(browser);

        var process = Components.classes["@mozilla.org/process/util;1"]
                                .createInstance(Components.interfaces.nsIProcess);
        process.init(file);
        process.run(false, [page.spec], 1);
        return true;
    }, false);
    menuPopup.appendChild(menuItem);

Отредактировано Lex1 (27-11-2012 16:46:11)

Отсутствует

 

№529027-11-2012 17:26:15

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 17.0

Re: Custom Buttons

Lex1, спасибо. Сделал так:

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

Выделить код

Код:

/*open in opera*/
var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");
var parentEleMenu = nextEleMenu.parentNode;

var menuId = "context-ext-addon";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    parentEleMenu.removeChild(menuItem.previousElementSibling);
    parentEleMenu.removeChild(menuItem);
};

    menuItem = document.createElement("menuitem");
    menuItem.setAttribute("label", "Открыть текущую страницу в Opera");
    menuItem.addEventListener("click", function() {
        var page = gBrowser.currentURI;
        var browser = "/usr/bin/opera";

        var file =  Components.classes["@mozilla.org/file/local;1"]
                              .createInstance(Components.interfaces.nsILocalFile);
        file.initWithPath(browser);

        var process = Components.classes["@mozilla.org/process/util;1"]
                                .createInstance(Components.interfaces.nsIProcess);
        process.init(file);
        process.run(false, [page.spec], 1);
        return true;
    }, false);
parentEleMenu.insertBefore(menuItem, nextEleMenu);


Хотелось отдельным пунктом, а не в подменю. И еще проблема - после каждого редактирования и сохранения кнопки появляется очередной пункт меню - до перезапуска [firefox]. После перезапуска - остается один пункт, как и должно быть.

Отредактировано lokiju (27-11-2012 17:28:29)

Отсутствует

 

№529127-11-2012 17:32:05

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

lokiju
Не хватает menuItem.setAttribute("id", menuId);

Отсутствует

 

№529227-11-2012 17:43:50

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 17.0

Re: Custom Buttons

Lex1 пишет

lokijuНе хватает menuItem.setAttribute("id", menuId);

Добавил и Открыть текущую страницу в Opera исчез из меню. Наверно №5888 , №5891 мешают друг другу.

Отредактировано lokiju (27-11-2012 17:44:21)

Отсутствует

 

№529327-11-2012 17:47:43

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Оно должно быть после menuItem = document.createElement("menuitem");
Ну и перезапустите, на всякий случай.

Отсутствует

 

№529427-11-2012 17:53:29

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 17.0

Re: Custom Buttons

Lex1 пишет

Оно должно быть после menuItem = document.createElement("menuitem");

Именно так.

Lex1 пишет

Ну и перезапустите, на всякий случай.

Не помогает.
Работает что-то одно или Открыть текущую страницу в Opera или Дополнительно(подменю букмарклетов)

Отсутствует

 

№529527-11-2012 18:17:56

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

А, ну это естественно - id то одинковый. Поставьте скажем в var menuId = "context-ext-open-opera";

Отсутствует

 

№529627-11-2012 18:40:39

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 17.0

Re: Custom Buttons

Lex1
спасибо,всё работает

Отсутствует

 

№529727-11-2012 19:47:40

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Может кто объяснит почему не удаляются обработчики в этом коде:

Выделить код

Код:

["mousedown", "mouseup", "dragstart"].forEach(function(type) { gBrowser.mTabContainer.addEventListener(type, function(e) { Services.console.logStringMessage(e.type); }, false) });
this.onDestroy = function() {
["mousedown", "mouseup", "dragstart"].forEach(function(type) { gBrowser.mTabContainer.removeEventListener(type, function(e) { Services.console.logStringMessage(e.type); }, false) });
};

Отсутствует

 

№529827-11-2012 19:53:54

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Выделить код

Код:

function(e) { Services.console.logStringMessage(e.type);

А если дать ей имя и использовать его в обработчиках?

Отсутствует

 

№529927-11-2012 19:59:27

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Lex1 пишет

А если дать ей имя и использовать его в обработчиках?

Я не понял ты про что?

Отсутствует

 

№530027-11-2012 20:03:53

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 17.0

Re: Custom Buttons

Про эту функцию. По идее ведь проверяются ссылки, а не содержимое. // mTabContainer.addEventListener(type, handler, false)

Отсутствует

 

Board footer

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