попробуй закоментировать case "goPopup": или case "PopupAutoCompleteRichResult": или case "PopupAutoComplete":
К сожалению, ничего не помогло.
Я попробовал 10-ю версию браузера - там всё заработало как надо, без всяких ухищрений. Чудеса!
Остался пока на 10.
Отсутствует
Я хочу сделать чтобы двойной клик выделял полностью текст в текстовых полях.
В инициализацию записан код
gBrowser.addEventListener("dblclick", function(event){ var ettN = event.target.tagName; if (((ettN=='TEXTAREA')||(ettN=='INPUT'))&&(event.button == 0)){ event.preventDefault(); document.getElementById("cmd_selectAll").doCommand(); } }, false);
И нужен ли тут event.preventDefault()? Вроде для левого даблклика никаких дефолтных действий не предусмотрено.
Отсутствует
1. Обработчик лучше добавлять вот так, иначе будет дублироваться если открыть настройку панелей и других случаях:
2. Для левого даблклика предусмотрено действие - выделение слов или предложений, но так как ты все равно выделяешь все то наверно event.preventDefault() не нужен.
И так тоже можно:
addEventListener("dblclick", function(e) { if ( e.button !== 0 ) return; if ( ['input', 'textbox', 'textarea'].indexOf( e.target.localName ) !== -1 ) e.target.select(); }, false, gBrowser );
Добавлено 30-07-2013 21:02:42
Работает, но часто (не всегда) одинарный левый клик-нажатие ЛКМ вызывает выделение, которое тут же исчезает при отпускании ЛКМ. Отчего это?
Не замечал такого хотя долго пользовался подобным кодом и твой код не должен реагировать на одинарный левый клик. Но можно добавить в код что то типа:
Отредактировано bunda1 (30-07-2013 21:13:21)
Отсутствует
Не замечал такого хотя долго пользовался подобным кодом и твой код не должен реагировать на одинарный левый клик. Но можно добавить в код что то типа:
Всё равно, и с этим кодом реагирует (спорадически) на одинарный клик - выделение появляется по событию onmousedown и по onmouseup оно сбрасывается. Т. е. при клике это выглядит как будто выделение появляется на долю секунды.
Ну ничего, жить с этим можно.
Cпасибо за помощь!
А вот как можно подправить этот код, чтобы он показывал код не выделенного фрагмента, а элемента с определённым id?
javascript:(function(){var l=' ';var z={img:1,br:1,link:1,input:1,hr:1,meta:1};var q=false;var r=0;var A=1;var h=window;var s='resizable=yes,scrollbars=yes,location=no';var t=function(a){return'<span class=\'tag\'><'+a+''};var u=function(a){return(a?'/':'')+'></span>'};var v=function(a,b){if(b||z[a.toLowerCase()])return'';return'<span class=\'tag\'></'+a+'></span>'};var B=function(){var a=document.doctype,b='';if(a){b=i()+t('!DOCTYPE')+' <span class=\'attrDoc\'>'+a.nodeName+(a.publicId?' PUBLIC \''+a.publicId+'\'':'')+(a.systemId?'</span></span></span></li>'+i()+'<span class=\'tag\'><span class=\'attrDoc\'>'+l+'\''+a.systemId+'\'':'')+'</span>'+u()+'</span></li>'}return b};var C=function(a){var b=a.attributes,f=null,c=null,d='',g=0;for(;f=b[g];g++){c=a.getAttribute(f.name)||f.value;if(c&&!(a.nodeName.toLowerCase()=='a'&&f.name=='SHAPE'&&c=='rect')){c=c.replace(/</g,'<').replace(/</g,'<').replace(/\t/g,l);d+=' <span class=\'attrTitle\'>'+f.name+'</span>=<span class=\'attrValue\'>\x22'+c+'\x22</span> '}}return d};var m=function(a){return text=a.nodeValue.replace(/[\n\t\r\u00A0]+ */g,'').replace(/ +/g,' ').replace(/</g,'<').replace(/>/g,'>')};var D=function(a){var b=0,f='';while(b<a){f+=l;b++}return f};var i=function(){var a=r.toString();while(a.length<3)a='0'+a;return'<li class=\'line'+(A&&((r++)&1)?' dark\'':'\'')+'><span>'};var w=function(a,b,f){var c=D(b++);var d='';switch(a.nodeType){case 1:{var g=a.childNodes,j=null,x=0;var n=(g.length==0)||(g.length==1&&g[0].nodeType==3);var o=q&&g.length==0;var k=i()+c+t(a.nodeName)+C(a)+u(o);if(!n)k+='</span></li>';for(;j=g[x];x++){k+=w(j,b,!n&&j.nodeType==3)}if(n){k+=(/textarea/i.test(a.nodeName)?a.value:'')+v(a.nodeName,o)+'</span></li>'}else{k+=i()+c+v(a.nodeName,o)+'</span></li>'}return k}case 3:{if((d=m(a))&&f){return i()+c+d+'</span></li>'}else{return d}}case 8:{d=m(a);return i()+c+'<span class=\'comment\'><!--'+d+'--></span></span></li>'}case 4:{d=m(a);return i()+c+'<span class=\'cdata\'><![CDATA[</span>'+d+'<span class=\'cdata\'>]]></span></span></li>'}}return a.nodeType};var E=function(a){var b='';if(!a||!a.getSelection)return b;if(a.getSelection()!=''){b=a.getSelection();h=a;s+=',width=500,height=400,left=100,top=100'}else{for(var f=0,c;c=a.frames[f];f++){try{if(b=arguments.callee(c))break}catch(e){}}}return b};var F=function(a){var b,f='';if(a){var c=a.getRangeAt(0);var d=c.commonAncestorContainer;if(d.nodeType==3||d.nodeType==4)d=d.parentNode;b=d.cloneNode(false);b.appendChild(c.cloneContents());var g=c.startContainer;var j=c.endContainer;if(g!=d.firstChild||(g.nodeType==3&&c.startOffset!=0))b.insertBefore(document.createTextNode('\u2026'),b.firstChild);if(j!=d.lastChild||(j.nodeType==3&&c.endOffset!=j.nodeValue.length))b.appendChild(document.createTextNode('\u2026'))}else{f=B();b=document.documentElement};f+=w(b,0);return f};var G=E(window);q=/[a-z]/.test(h.document.documentElement.nodeName);var H=(h.document.getElementsByTagName('title')[0]&&h.document.getElementsByTagName('title')[0].text.replace(/</g,'<').replace(/>/g,'>'))||(h.location.protocol+'//'+h.location.host+h.location.pathname);var I='<!DOCTYPE html PUBLIC><html><head><title>Snapshot: '+H+'</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:green}.line{margin:0;padding:0}.dark{background-color:#FAFAFA}</style></head><body><ol id=\'content\'>'+F(G)+'</ol></body></html>';var y=window.open('about:blank','_blank',s);var p=y.document;p.write(I);p.onkeyup=function(a){if(a.keyCode==27)y.close()};p.close()})()
Отредактировано Чайник (01-08-2013 15:15:06)
Отсутствует
Подскажите пожалуйста, а можно при помощи кода кнопки закрыть текущий таб? (window.close(); не подходит, т.к. закрывает вообще весь браузер)
Отсутствует
Отсутствует
О, круть, как всё подробненько, исчо раз благодарю
Отсутствует
Есть такая кнопка Готовые кнопки для Custom Buttons | Форум Mozilla Россия|№173 от Lex1 как сделать ,чтобы в контекстном меню на странице от этой кнопки был один пункт «Перевести». При наведении на который(курсора) - открывалось подменю с пунктами:«на русский» , «на английский»
Вопрос к Dumby: Custom Buttons | Форум Mozilla Россия|Digital Clock - всплывающая подсказка - сейчас название кнопки. Сделать число,месяц,год,день недели - возможно?
Отредактировано lokiju (03-08-2013 21:08:14)
Отсутствует
Сделать число,месяц,год,день недели - возможно?
Вариант
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EDigital%20Clock%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAHg8AAAEAIABsBwAAFgAAACgAAAAeAAAAHgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Cgv//goL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Cgv//goL//////9v///8AOpD/AAAA/5A6AP///9v//////9v///8AOpD/AAAA/5A6AP///9v//////2a2//+QOgD////b/9v///8AOpD/AAAA/5A6AP///9v//////9v///8AOpD/AAAA/5A6AP///9v///////+Cgv//goL//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////2a2//+QOgD////b/zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD///////+Cgv//goL/2////zo6kP//25D//////5Db//9mADr/2/+2/zo6kP//25D//////5Db//9mADr///+2////////////2////zo6kP//25D//////5Db//9mADr/2/+2/zo6kP//25D//////5Db//9mADr///+2//+Cgv//goL/tv///zoAZv//25D//////7b///86AGb/ttuQ/zoAZv//25D//////7b///86AGb//9uQ////////////tv///zoAZv//25D//////7b///86AGb/ttuQ/zoAZv//25D//////7b///86AGb//9uQ//+Cgv//goL/tv///2YAZv///7b//////7b///86AGb/ttuQ/2YAZv///7b//////7b///86AGb//9uQ/2a2//+QOgD/tv/b/2YAZv///7b//////7b///86AGb/ttuQ/2YAZv///7b//////7b///86AGb//9uQ//+Cgv//goL/tv///zoAZv//25D//////7b///86AGb/ttuQ/zoAZv//25D//////7b///86AGb//9uQ/2a2//+QOgD/tv/b/zoAZv//25D//////7b///86AGb/ttuQ/zoAZv//25D//////7b///86AGb//9uQ//+Cgv//goL/2////wA6kP//tmb//////5Db//9mADr/2/+2/wA6kP//tmb//////5Db//9mADr///+2////////////2////wA6kP//tmb//////5Db//9mADr/2/+2/wA6kP//tmb//////5Db//9mADr///+2//+Cgv//goL//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////////////////////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD//////zqQ2/+2ZgD///////+Cgv//goL//////9v///8AOpD/AAAA/2YAAP///7b//////9v///8AOpD/AAAA/2YAAP///7b//////////////////////9v///8AOpD/AAAA/2YAAP///7b//////9v///8AOpD/AAAA/2YAAP///7b///////+Cgv//goL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Cgv//goL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bconst%20showSec%20%3D%20true%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A/*%20dct-style%0A%0A%23digital-clock-text%20%7B%0A%09color%3A%20%23b73520%20%21important%3B%0A%09font-weight%3A%20bold%20%21important%3B%0A%0A%7D%0A%0Adct-style%20*/%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Aconst%20mark%20%3D%20%22dct-style%22%3B%0Aconst%20init%20%3D%20this.getAttribute%28%22cb-init%22%29%3B%0Aconst%20style%20%3D%20init.substring%28%0A%09init.indexOf%28%22/*%20%22%20+%20mark%29%20+%203%20+%20mark.length%2C%0A%09init.lastIndexOf%28mark%20+%20%22%20*/%22%29%0A%29.replace%28/%5Cn+/g%2C%20%22%5Cn%22%29.replace%28/%5E%5Cn/%2C%20%22%22%29.replace%28/%5Cn%24/%2C%20%22%22%29%3B%0A%0Athis.label%20%3D%20showSec%20%3F%20%2200%3A00%3A00%22%20%3A%20%2200%3A00%22%3B%0A%0Aconst%20icon%20%3D%20document.getAnonymousElementByAttribute%28this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Aicon.style.display%20%3D%20%22none%22%3B%0Aconst%20text%20%3D%20document.getAnonymousElementByAttribute%28this%2C%20%22class%22%2C%20%22toolbarbutton-text%22%29%3B%0Atext.style.display%20%3D%20%22block%22%3B%0Atext.id%20%3D%20%22digital-clock-text%22%3B%0A%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Aconst%20cssURI%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28style%29%29%3B%0Aif%20%28%21sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%29%20sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%0Aconst%20format%20%3D%20showSec%20%3F%20%22%25H%3A%25M%3A%25S%22%20%3A%20%22%25H%3A%25M%22%3B%0Aconst%20timer%20%3D%20Cc%5B%22@mozilla.org/timer%3B1%22%5D.createInstance%28Ci.nsITimer%29%3B%0Afunction%20tick%28%29%20%7B%0A%09var%20date%20%3D%20new%20Date%28%29%3B%0A//%09date.setHours%28date.getHours%28%29%20+%200%29%3B%0A%09self.label%20%3D%20date.toLocaleFormat%28format%29%0A%7D%0Atimer.initWithCallback%28tick%2C%201000%2C%20timer.TYPE_REPEATING_PRECISE%29%3B%0A%0Athis.onmouseenter%20%3D%20function%28%29%20%7B%0A%09this.interval%20%3D%20setInterval%28function%28%29%20%7B%0A%09%09var%20date%20%3D%20new%20Date%28%29%3B%0A//%09%09date.setHours%28date.getHours%28%29%20+%200%29%3B%0A%09%09var%20day%20%3D%20date.toLocaleFormat%28%22%25A%22%29%3B%0A%09%09self.tooltipText%20%3D%20date.toLocaleFormat%28%22%25d.%25m.%25Y%20%22%29%20+%20day%5B0%5D.toUpperCase%28%29%20+%20day.substring%281%29%3B%0A%09%7D%2C%20100%29%0A%7D%3B%0Athis.onmouseleave%20%3D%20function%28%29%20clearInterval%28this.interval%29%3B%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%09if%20%28reason%20%3D%3D%20%22update%22%20%7C%7C%20reason%20%3D%3D%20%22delete%22%29%20%7B%0A%09%09if%20%28sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%29%20sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09%7D%0A%09timer.cancel%28%29%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
B FF22 перестали работать кнопки:
Extensions:
/*Initialization Code*/ this.url2xul = 'chrome://mozapps/content/extensions/extensions.xul'; this.onClick = function (e) { switch (e.button) { case 0: try { BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); } break; case 1: { if (e.ctrlKey) { var t = gBrowser.mTabs; var current = content.document.location.href; var i = t.length; if (current == this.url2xul) gBrowser.removeCurrentTab(); else while (true) { if (--i < 0) { if (current == 'about:blank') // replace blank tab loadURI(this.url2xul); else // add new tab gBrowser.selectedTab = gBrowser.addTab(this.url2xul); break; }; if (t[i].linkedBrowser.currentURI.spec == this.url2xul) // popup loaded { gBrowser.selectedTab = gBrowser.tabContainer.childNodes[i]; break; }; }; } else openWebPanel(this.tooltipText, this.url2xul); }; break; }; }; this.setAttribute('onclick', 'this.onClick(event);'); const Cb = custombuttons; function prop(aElement, aString) { var emRDF = "http://www.mozilla.org/2004/em-rdf#"; var arc = RDFService.GetResource(emRDF + aString); var target = extensionDS.GetTarget(aElement, arc, true); if (target instanceof Ci.nsIRDFLiteral) return target.Value; if (target instanceof Ci.nsIRDFInt) return target.Value; return null; } var cloneCBcontext = { cloneItems: function (aNode, aID, aSeparate) { var menupopup = document.getElementById(aID).cloneNode(true); var menuitems = menupopup.childNodes.length; for (var i = 0; i < menuitems; i++) aNode.appendChild(menupopup.firstChild); if (aSeparate) aNode.appendChild(document.createElement("menuseparator")); }, makeMenu: function (aNode) { var m = aNode.appendChild(document.createElement("menu")); m.setAttribute("label", "Custom Button"); m.setAttribute("oncommand", "event.stopPropagation()"); var mp = m.appendChild(document.createElement("menupopup")); cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup"); aNode.insertBefore(document.createElement("menuseparator"), m); } } const popupID = "cbContext-extensionsButton"; var test = document.getElementById(popupID); if (test) test.parentNode.removeChild(test); var main = document.getElementById("mainPopupSet"); var cPopup = main.appendChild(document.createElement("menupopup")); cPopup.id = popupID; cPopup.setAttribute("oncommand", "event.stopPropagation(); document.popupNode.openPrefs(event);") var app = Cc ["@mozilla.org/fuel/application;1"]. getService (Ci. fuelIApplication); var am = {}; Cu. import ("resource://gre/modules/AddonManager.jsm", am); am. AddonManager. getAddonsByTypes ( ["extension"], function (extensions) { var e; for (var i = 0; i < extensions. length; i++) { e = extensions [i]; var mi = <menuitem xmlns={xulns} label={e. name + " " + e. version}/>; if (e. iconURL) { mi ["@class"] = "menuitem-iconic bookmark-item"; mi ["@image"] = e. iconURL; } if (e. userDisabled) mi ["@disabled"] = "true"; if (e. optionsURL) mi ["@oncommand"] = "window. openDialog ('" + e. optionsURL + "', '', 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen');"; cPopup. appendChild (cbu. makeXML (mi)); } } ); cloneCBcontext.makeMenu(cPopup); this.setAttribute("context", popupID); if (typeof Local_Install != "object") return; var test = document.getElementById("cbContext-extensions"); if (test) test.parentNode.removeChild(test); var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context var subMenu = document.createElement("menu"); subMenu.setAttribute("label", "Custom Button"); subMenu.appendChild(cbPopup.lastChild); var extensionsPopup = document.getElementById("emb-context"); var popup = extensionsPopup.cloneNode(true); popup.id = "cbContext-extensions"; popup.appendChild(document.createElement("menuseparator")); popup.appendChild(subMenu); extensionsPopup.parentNode.appendChild(popup); this.setAttribute("context", popup.id);
Stacked Session Bookmarks:
// http://infocatcher.ucoz.net/js/cb/sessionBookmarks.js // Session Bookmarks button for Custom Buttons // (code for "initialization" section) // (c) Infocatcher 2011 // version 0.1.0pre2 - 2011-06-26 // Compatibility: Firefox 3.6+, SeaMonkey 2.1+ var options = { middleClickCloseMenu: true, checkDuplicates: true, useSessions: true, reloadSessions: true }; this.type = "menu"; this.orient = "horizontal"; this.onclick = function(e) { if(e.target != this) return; if(e.button == 1 || e.button == 0 && this.bookmarks.hasModifier(e)) this.bookmarks.addBookmark(); }; this.setAttribute("ondragdrop", "return this.bookmarks.handleDrop(event);"); this.setAttribute("ondragover", "return this.bookmarks.handleDragOver(event);"); this.bookmarks = { options: options, get deleteLabel() { var mi = document.getElementById("placesContext_delete"); delete this.deleteLabel; return this.deleteLabel = mi && mi.getAttribute("label") || "Delete"; }, get openAllLabel() { var sb = document.getElementById("bundle_browser"); if(sb) try { var label = sb.getString("menuOpenAllInTabs.label"); } catch(e) { } delete this.openAllLabel; return this.openAllLabel = label || "Open All in Tabs"; }, button: this, XULNS: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", get ss() { delete this.ss; return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"] .getService(Components.interfaces.nsISessionStore); }, get ios() { delete this.ios; return this.ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); }, get file() { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsILocalFile); file.append("custombuttons"); file.append("bookmarks" + (/\d+/.test(this.button.id) ? "-" + RegExp.lastMatch : "") + ".txt"); delete this.file; return this.file = file.QueryInterface(Components.interfaces.nsILocalFile); }, init: function() { var file = this.file; if(file.exists()) this.readFromFileAsync(file, this.load, this); else this.load(""); }, _label: "label: ", _uri: "uri: ", _icon: "icon: ", _session: "session: ", load: function(data) { var btnId = this.button.id; this.cmId = btnId + "-context"; this.sepId = btnId + "-separator"; this.openAllId = btnId + "-openAll"; var mp = <menupopup xmlns={this.XULNS} context={this.cmId} oncommand="this.parentNode.bookmarks.openBookmark(event);" onclick="this.parentNode.bookmarks.openBookmark(event);" onpopuphidden="this.parentNode.bookmarks.checkUnsaved();" /> data.split("\n\n").forEach(function(section, i) { if(!section) return; var label, uri, icon, ssData; var typeOffset = this._label.length; section.split("\n").forEach(function(line, i) { if(!line) return; var type = line.substr(0, typeOffset); line = line.substr(typeOffset); switch(type) { case this._label: label = line; break; case this._uri: uri = line; break; case this._icon: icon = line; break; case this._session: ssData = line; } }, this); mp.appendChild(this.getMenuitem(label, uri, icon, ssData)); }, this); mp.appendChild( <menuseparator xmlns={this.XULNS} id={this.sepId} /> ); mp.appendChild( <menuitem xmlns={this.XULNS} id={this.openAllId} label={this.openAllLabel} /> ); this.mp = this.button.appendChild(this.parseFromXML(mp)); var cm = document.getElementById(this.cmId); cm && cm.parentNode.removeChild(cm); cm = this.parseFromXML( <menupopup xmlns={this.XULNS} id={this.cmId} onpopupshowing="return (this.parentNode.triggerNode || document.popupNode).hasAttribute('cb_uri');" > <menuitem label={this.deleteLabel} closemenu="single" oncommand="this.parentNode.bookmarks.deleteBookmark(this.parentNode.triggerNode || document.popupNode);" /> </menupopup> ); cm.bookmarks = this; document.getElementById("mainPopupSet").appendChild(cm); this.showOpenAll(); }, unsaved: false, save: function() { var data = []; Array.forEach( this.mp.getElementsByAttribute("cb_uri", "*"), function(mi) { var section = [ this._label + this.escapeString(mi.getAttribute("label")), this._uri + this.escapeString(mi.getAttribute("cb_uri")) ]; var icon = mi.getAttribute("image"); var ssData = mi.getAttribute("cb_ssData"); icon && section.push(this._icon + this.escapeString(icon)); ssData && section.push(this._session + this.escapeString(ssData)); data.push(section.join("\n")); }, this ); this.writeToFileAsync(data.join("\n\n"), this.file); this.unsaved = false; }, checkUnsaved: function() { this.unsaved && this.save(); }, getMenuitem: function(label, uri, icon, ssData) { return <menuitem xmlns={this.XULNS} class="menuitem-iconic bookmark-item menuitem-with-favicon" label={label || ""} cb_uri={uri || ""} cb_ssData={ssData || ""} tooltiptext={uri || ""} image={icon || ""} /> }, addBookmark: function(tab) { if(!tab) tab = gBrowser.selectedTab; var label = tab.label; var uri = tab.linkedBrowser && tab.linkedBrowser.currentURI.spec; var icon = tab.image; if(/^https?:/.test(icon) && !this.isOldSeaMonkey) // https://bugzilla.mozilla.org/show_bug.cgi?id=467828 icon = "moz-anno:favicon:" + icon; if(this.options.useSessions) var ssData = this.ss.getTabState(tab); if(this.options.checkDuplicates) { var mi = this.mp.getElementsByAttribute("cb_uri", uri); if(mi.length) { mi = mi[0]; if( mi.getAttribute("label") == label && mi.getAttribute("image") == icon && (this.options.useSessions ? mi.getAttribute("cb_ssData") == ssData : true) ) return; } } var mi = this.parseFromXML(this.getMenuitem(label, uri, icon, ssData)); this.mp.insertBefore(mi, document.getElementById(this.sepId)); this.save(); this.showOpenAll(true); this.blink(); }, blink: function() { var stl = this.button.style; if("transition" in stl) stl.transition = "opacity 100ms ease-in"; else if("MozTransition" in stl) stl.MozTransition = "opacity 100ms ease-in"; stl.opacity = "0.72"; setTimeout(function() { stl.opacity = ""; setTimeout(function() { if("transition" in stl) stl.transition = ""; else if("MozTransition" in stl) stl.MozTransition = ""; }, 150); }, 250); }, openBookmark: function(e) { var mi = e.target; if(mi.id == this.openAllId) { if(e.type == "command") this.openAllBookmarks(); return; } var uri = mi.getAttribute("cb_uri"); var tab; if(e.type == "click" ? e.button == 1 : this.hasModifier(e)) { tab = gBrowser.selectedTab = gBrowser.addTab(this.options.useSessions ? "about:blank" : uri); this.options.middleClickCloseMenu && closeMenus(mi); } else if(e.type == "command") { if(!this.options.useSessions) loadURI(uri); tab = gBrowser.selectedTab; } if(tab && this.options.useSessions) this.setTabSession(tab, mi.getAttribute("cb_ssData"), uri); }, openAllBookmarks: function() { Array.forEach( this.mp.getElementsByAttribute("cb_uri", "*"), function(mi, i, mis) { if(this.options.useSessions) { var tab = gBrowser.addTab("about:blank"); this.setTabSession(tab, mi.getAttribute("cb_ssData"), mi.getAttribute("cb_uri")); } else { gBrowser.addTab(mi.getAttribute("cb_uri")); } }, this ); }, setTabSession: function(tab, ssData, uri) { try { this.ss.setTabState(tab, ssData); if(this.options.reloadSessions && !this.ios.offline) tab.linkedBrowser.addProgressListener(this.progressListener); } catch(e) { uri && tab.linkedBrowser.loadURI(uri); } }, progressListener: { QueryInterface: function(aIID) { if( aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports) ) return this; throw Components.results.NS_NOINTERFACE; }, onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { var wpl = Components.interfaces.nsIWebProgressListener; if(aFlag & wpl.STATE_START) { // Force load to bypass cache aRequest.loadFlags = aRequest.loadFlags | aRequest.LOAD_BYPASS_CACHE; aWebProgress.chromeEventHandler.removeProgressListener(this); } }, onLocationChange: function(aProgress, aRequest, aURI) {}, onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) {}, onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) {}, onSecurityChange: function(aWebProgress, aRequest, aState) {} }, deleteBookmark: function(mi) { mi.parentNode.removeChild(mi); if(this.button.open || this.button.getAttribute("open") == "true") this.unsaved = true; else this.save(); this.showOpenAll(); }, showOpenAll: function(show) { if(show === undefined) show = this.mp.getElementsByAttribute("cb_uri", "*").length > 0; document.getElementById(this.sepId).hidden = document.getElementById(this.openAllId).hidden = !show; if(!show) this.mp.hidePopup(); }, handleDragOver: function(event) { var dt = event.dataTransfer; //~ todo: dt.mozItemCount var tab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if(!tab) return null; event.preventDefault(); event.stopPropagation(); return dt.effectAllowed = dt.dropEffect = "link"; }, handleDrop: function(event) { var dt = event.dataTransfer; //var uri = dt.mozGetDataAt("text/x-moz-text-internal", 0); var tab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); this.addBookmark(tab); }, get isOldSeaMonkey() { var info = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); delete this.isOldSeaMonkey; return this.isOldSeaMonkey = info.name == "SeaMonkey" && parseFloat(info.version) <= 2; }, hasModifier: function(e) { return e.ctrlKey || e.shiftKey || e.altKey || e.metaKey; }, escapeString: function(s) { return s.replace(/\n/g, "\r"); }, readFromFileAsync: function(file, callback, context) { Components.utils.import("resource://gre/modules/NetUtil.jsm"); NetUtil.asyncFetch(file, this.bind(function(istream, status) { var data = ""; if(Components.isSuccessCode(status)) { try { // Firefox 7.0a1 throws after istream.available() on empty files data = this.convertToUnicode(NetUtil.readInputStreamToString(istream, istream.available())); } catch(e) { } } callback.call(context || this, data, status); }, this)); }, writeToFileAsync: function(str, file, callback, context) { Components.utils["import"]("resource://gre/modules/NetUtil.jsm"); Components.utils["import"]("resource://gre/modules/FileUtils.jsm"); var ostream = FileUtils.openSafeFileOutputStream(file); var suc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); suc.charset = "UTF-8"; var istream = suc.convertToInputStream(str); NetUtil.asyncCopy(istream, ostream, callback && this.bind(function(status) { callback.call(context || this, status); }, this)); }, convertToUnicode: function(str) { var suc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); suc.charset = "utf8"; try { return suc.ConvertToUnicode(str); } catch(e) { Components.utils.reportError(e); } return str; }, bind: function(func, context, args) { return function() { return func.apply(context, args || arguments); }; }, parseFromXML: function(xml) { var pp = XML.prettyPrinting; XML.prettyPrinting = false; var elt = this.parseFromString(xml.toXMLString()); XML.prettyPrinting = pp; return elt; }, parseFromString: function(str, contentType) { return new DOMParser().parseFromString(str, contentType || "application/xml").documentElement; } }; this.bookmarks.init();
Покозать/скрыть панель закладок:
/*CODE*/ toggleToolbar("PersonalToolbar"); function toggleToolbar(tbId, show, multiple) { var tb = tbId == "FindToolbar" && window.gFindBar || document.getElementById("__customToolbar_" + tbId.replace(/ /, "_")) || document.getElementById(tbId); if(!tb) { Components.utils.reportError(<>[Custom Buttons] Toolbar "{tbId}" not found!</>); return; } var hideAttr = tb.getAttribute("type") == "menubar" ? "autohide" : tb.localName == "findbar" ? "hidden" : "collapsed"; var hide = show == undefined ? tb.getAttribute(hideAttr) != "true" : !show; tb.setAttribute(hideAttr, hide); document.persist(tbId, hideAttr); !multiple && toggleToolbarsDone(); } function toggleToolbarsDone() { if("PlacesToolbarHelper" in window) { // Firefox 4 PlacesToolbarHelper.init(); BookmarksMenuButton.updatePosition(); updateAppButtonDisplay(); } } function toggleToolbars(toolbars, show) { toolbars.forEach(function(tbId) { toggleToolbar(tbId, show, true); }); toggleToolbarsDone(); }
Помогите решить проблему!
Спасибо.
Отсутствует
B FF22 перестали работать кнопки:
Stacked Session Bookmarks:
Session Bookmarks 0.2.0 (2013-01-26)
B FF22 перестали работать кнопки:
Покозать/скрыть панель закладок:
toggleToolbar("PersonalToolbar"); function toggleToolbar(tbId, show, multiple) { var tb = tbId == "FindToolbar" && window.gFindBar || document.getElementById("__customToolbar_" + tbId.replace(/ /, "_")) || document.getElementById(tbId); if(!tb) { Components.utils.reportError('[Custom Buttons] Toolbar: ' + tbId + ' not found!'); return; } var hideAttr = tb.getAttribute("type") == "menubar" ? "autohide" : tb.localName == "findbar" ? "hidden" : "collapsed"; var hide = show == undefined ? tb.getAttribute(hideAttr) != "true" : !show; tb.setAttribute(hideAttr, hide); document.persist(tbId, hideAttr); !multiple && toggleToolbarsDone(); } function toggleToolbarsDone() { if("PlacesToolbarHelper" in window) { // Firefox 4 PlacesToolbarHelper.init(); BookmarksMenuButton.updatePosition(); updateAppButtonDisplay(); } } function toggleToolbars(toolbars, show) { toolbars.forEach(function(tbId) { toggleToolbar(tbId, show, true); }); toggleToolbarsDone(); }
B FF22 перестали работать кнопки:
Extensions:
Отредактировано bunda1 (05-08-2013 21:06:45)
Отсутствует
В Torbutton есть функция подмены разрешения экрана и часового пояса/системного времени для JavaScript, за это отвечает, кажется, вот этот код, можно его как-то перенести в кнопку, чтобы всё это работало без самого дополнения?
Отсутствует
okkamas_knife
не открытой вкладки нужно
а определенного сайта;
и второе хотелось бы все таки что-то типо:
var listUrl = new Array();
var listText = new Array();
$('.blocks_content:first a').each(function(i,elem)
{
listUrl.push($(elem).attr('href'));
listText.push($(elem).text());
});
Отсутствует
Нужна кнопка Quick bookmarks для новых версий FF. Или, может быть, посоветуете её замену?
Отсутствует
У тех у кого кнопка-жесты, есть ли у вас код: в начало, в конец документа ?
Отсутствует
У тех у кого кнопка-жесты, есть ли у вас код: в начало, в конец документа ?
Отредактировано bunda1 (06-08-2013 21:22:02)
Отсутствует
bunda1, спасибо
нда, теперь они не мгновенные в 23(если вставлять в FireGestures, а не кнопкой)
Отредактировано Pony_Smile_Pack (07-08-2013 02:08:10)
Отсутствует