bunda1
сломалась кнопочка ((
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%3EClear%20Cache%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACHklEQVR4AZ2S7WtSYRjGD1HfAiKAiqIiaqOhjD4tagMLCKB/IggGo9FgFazY1moFTovecGsAY83IpeTUGAzOKJoTzXdTz0sH0XZSTCWIBhEgV899wENHiFYP/FDv+7p+PEcO51FOEZanmV3YKpSn3vDCCY7K56fe7MFydS/6H3VheKHjj9je7oRftYDy1NME9EP++ZAEf+Vdw6J9Up56mmAicARu8QxsbLBVnn/oAfV0AQ3/kZZgB3fDcxT/CQm2cU+8g+es9jvN6Tk7bI5R2InpMY17M+M6NKf949kp2O7fbT7wXejlWicQCHzP5XKQZVmHj8/i2qIJq/F5wzwSiYDn+a/c7yccDn8qFotoNBoaX2oVjHi6EBJduLlkxnV3n77LZrOEbBBEo9H3oijqoUyBx+TrbgildVxZ7MQt71l9F4vFIEkSbxAkEgkXA3F5FZedJtz2d6Naq2iFWr0Kf9SKSlVFvV5HMBhEoVBwGASpVGokFAqh3qjBunwaQ04zSmWJBJpo4lUfxl6eRLlcBuUURRkwCDKZjHltba0plsIY9XZiPe9CMOfCRkXBuKcHYcGPgfn9yEpJeoSmKIrHDYJ8Pr+dmTfVzxuY9PfiqrsDQy8OYSU5g0vOAxh8dhD9c8fAikin098oz7WfZDJZUlWVrm3AwV9sfaerQxCEj+3dwwwTu8GKz+f7wdhk70WzHZrTnv1fSyy/j7Gbyr8AV4FsTcmSKioAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%0A%0A%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20showAlertNotification%28self.image%2C%20self.label%20+%20%22%20%20%22%2C%20%27Operation%20Complete%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%0A%7D%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0A%28function%28%29%20%7B%0A%20%20%20%20var%20title%20%3D%20self.label%20+%20%22%3A%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%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
this.onclick = function(e) { if ( e.button ) return; // очистить кэш .... try { Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY); Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK); } catch(e) { Services.cache2.clear() } // Всплывающее сообщение .... Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService). showAlertNotification(self.image, self.label + " ", 'Operation Complete', false, "", null, ""); }; // Всплывающая подсказка у кнопки .... (function() { var title = self.label + ":\n\n"; var data = { memory: "Memory Cache: ", disk: "Disk Cache: ", offline: "Offline Cache: " }; function getSize(size) { if (!size) return size === 0 ? "0" : "?"; for(var count = -1; size >= 1024; size /= 1024, count++); return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B"; } function setInf(tot, max, type, i) { var inf = getSize(tot) + " / " + getSize(max); var key = "browser.cache." + type + ".enable"; if (!Services.prefs.getBoolPref(key)) inf += " (disabled)"; self.tooltipText = self.tooltipText.replace(zws(i), inf); } function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind); var types = Object.keys(data); var ttt = title + types.map(function(key, i) data[key] + zws(i)).join("\n"); self.onmouseenter = function() { self.tooltipText = ttt; try { var entries = {}; Services.cache.visitEntries({ visitDevice: function(device, info) entries[device] = info, visitEntry: function() {} }); types.forEach(function(type, i) { var info = entries[type]; setInf(info && info.totalSize, info && info.maximumSize, type, i) }); } catch(ex) { Services.cache2 && types.forEach(function(type, i) { var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory) setInf(aConsumption, aCapacity, type, i); var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null); try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {}; }); } }; })();
Отсутствует
bunda1
сломалась кнопочка ((
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%3EClear%20Cache%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACHklEQVR4AZ2S7WtSYRjGD1HfAiKAiqIiaqOhjD4tagMLCKB/IggGo9FgFazY1moFTovecGsAY83IpeTUGAzOKJoTzXdTz0sH0XZSTCWIBhEgV899wENHiFYP/FDv+7p+PEcO51FOEZanmV3YKpSn3vDCCY7K56fe7MFydS/6H3VheKHjj9je7oRftYDy1NME9EP++ZAEf+Vdw6J9Up56mmAicARu8QxsbLBVnn/oAfV0AQ3/kZZgB3fDcxT/CQm2cU+8g+es9jvN6Tk7bI5R2InpMY17M+M6NKf949kp2O7fbT7wXejlWicQCHzP5XKQZVmHj8/i2qIJq/F5wzwSiYDn+a/c7yccDn8qFotoNBoaX2oVjHi6EBJduLlkxnV3n77LZrOEbBBEo9H3oijqoUyBx+TrbgildVxZ7MQt71l9F4vFIEkSbxAkEgkXA3F5FZedJtz2d6Naq2iFWr0Kf9SKSlVFvV5HMBhEoVBwGASpVGokFAqh3qjBunwaQ04zSmWJBJpo4lUfxl6eRLlcBuUURRkwCDKZjHltba0plsIY9XZiPe9CMOfCRkXBuKcHYcGPgfn9yEpJeoSmKIrHDYJ8Pr+dmTfVzxuY9PfiqrsDQy8OYSU5g0vOAxh8dhD9c8fAikin098oz7WfZDJZUlWVrm3AwV9sfaerQxCEj+3dwwwTu8GKz+f7wdhk70WzHZrTnv1fSyy/j7Gbyr8AV4FsTcmSKioAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%0A%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20showAlertNotification%28self.image%2C%20self.label%20+%20%22%20%20%22%2C%20%27Operation%20Complete%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0A%28function%28%29%20%7B%0A%20%20%20%20var%20title%20%3D%20self.label%20+%20%22%3A%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%20%0A%20%20%20%20var%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%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
Отсутствует
bunda1
Понравилась ваша кнопка. А можно что бы меню, с поисковиками, открывалось при наведении курсора на поле ввода а не по щелчку как сейчас? Если уже ленится так до упора
положи в инициализацию кнопки:
var box = BrowserSearch.searchBar._textbox; box.onmouseleave =()=> box.mo = true; box.onmouseover =()=> { box.mo = false; setTimeout(()=> !box.mo && box.childNodes[1].children[0].children[0].click(), 800); }; addDestructor(()=> box.onmouseover =()=> null );
Время удержания курсора на панели поиска 800 при котором открывается меню с поисковиками, подправь так как тебе удобнейю
Отсутствует
Dumby, bunda1, если не сложно, подскажите еще пожалуйста отдельно код для удаления всех куков сайта с возможностью ручной подстановки в сам код имени сайта. И я так и не нашел самый простой вариант, чтобы все адреса открытых вкладок сливались в одну папку закладок (прописанную в самом коде), закрывая при этом все вкладки. Спасибо.
var hosts = [ "□□□□□□.□□", "□□□□□□.□□□", "□□□□.□□□□□□□.□□" ]; var en = Services.cookies.enumerator; while(en.hasMoreElements()) { var cookie = en.getNext().QueryInterface(Ci.nsICookie); for(var host of hosts) if ( //cookie.host == "." + host || cookie.host == host cookie.host.endsWith("." + host) || cookie.host == host ) Services.cookies.remove(cookie.host, cookie.name, cookie.path, false); }
var parentFolderId = □□; for(var tab of [...gBrowser.tabs]) PlacesUtils.bookmarks.insertBookmark( parentFolderId, tab.linkedBrowser.currentURI, -1, tab.label ), gBrowser.removeTab(tab);
Отсутствует
emlen
Наводишь Attributes Inspector на Панель меню > Закладки > Папка
Жмешь Ctrl+ЛКМ или СКМ. Откроется DOM Inspector.
В окне DOM Inspector'а, с правой стороны, Объект Javascript > _placesNode > itemId
Отсутствует
А как узнать parentFolderId?
Можно добавлять вкладки в папку закладок указав её название, если такой папки не существует код создаст её на панели закладок:
var folderName = "qwerty"; var folderId = getBookmarksFolderId(folderName); if ( !folderId ) { PlacesUtils.bookmarks.createFolder(3, folderName, -1); var folderId = getBookmarksFolderId(folderName); } for(var tab of [...gBrowser.tabs]) PlacesUtils.bookmarks.insertBookmark( folderId, tab.linkedBrowser.currentURI, -1, tab.label ), gBrowser.removeTab(tab); function getBookmarksFolderId(folderName, id = 1) { var res = false; (function f(id) { var folder = PlacesUtils.getFolderContents(id).root; folder.QueryInterface(Ci.nsINavHistoryContainerResultNode); folder.containerOpen = true; for ( var i = 0; i < folder.childCount; i++ ) { var child = folder.getChild(i); if ( !PlacesUtils.nodeIsFolder(child) ) continue; if ( child.title == folderName ) { res = child.itemId; break; } f(child.itemId); } folder.containerOpen = false })(id); return res; };
Отсутствует
bunda1, спасибо. Еще бы хотелось подкорректировать вот что: каждый раз создается лишний ярлык "Загрузка…" с адресом "about:blank" и было бы неплохо добавлять все ярлыки сверху списка содержимого подпапки закладок, а не в его далеком хвосте..
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%3ESession2bm%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAEVUlEQVR4XqWUf0xVZRjHv+/5ce/h3gsXrxZcvJQgXBFcgjrNJcJac07KSXNrWjL/EKyV6WprKdMgchW0pLRYKqlLi37aJrXmgkqWBKQJkgnKvCAKYrircX+ce885Ty/s3oWTNh3P9tnOH+f9PN+953kO27VGsAPYIDC2hRiLZ2S8/+IRvRSTLO7Dq0kPZu7MW1nserRgnc0SN2Vz9VrxqUmLRVEuzlyQb/Z7GhD29iB70TKrwLCLy+VJiQ09HDI0jXcwYWSgA1arBQnTZ9oBbKx9jT1x6A3zyb0bmXzPYs7Bs63HA3Gp+bAmZOFWXysycnItZgeqTErs50SYz5KQcu+JCaXDg57qph8+C0pT3DA7ZqBvqAmOmVOVVUVbYpzJaSrT8BDutYhoDD4dq3cXmfyf7nRQ/d5kGu4pId/ll+jX1W46JjOtXhB2ExHuFgGRss8yTsekhG5Oc5kpZ3EWApdPoXX5AeCXIWQmukRdoGf37WBFHPlu7xi1O9gjBJzOzE67b3Z2BvO2daNzVQccwzJc1nicv34V8SUZUlJy8oeixHq5fPVdiQUR28Bk60C/19dZc0rzPN+L9DgnJCagY6gfyZVuZGxyYemKZ6zLCtc7pyU4Dx2sEFt5g7T/EzMiAgDsL2cuGJidWCl84XYkxg+rPgxLKlLeI1geEGE2WyCbrFBs8yBZcnDF8xc1N9T7Q+rIm4ZBbxe/TtqE4ijfieJ2XaSy2LxUlvRKLxMUgiSZx8QmDn+GLNkgW+cjTKn4o6Ux0NPZ5A2F1HIAB3kDNXIVt1eBrlcMbSUtY89yJlos0dmJ5gBjNmiaCoTOQEEjFi/NiVm5bqszfc6id0VRuFZbxrbzK1KEifcc/f6RYYim+/8byYhcEIKQzC4EfCpID4Gpv8OutGPJYwWWx9duthMTSu9IHIUMfPv3QJ9hUtIBELSwxiUGADN0TYcs+iBbZsF74xYMMgEgHsaGi3+2qJKAI/w6ghOKDQNfXzh3xi/HuMGYAiIDoRCXE0E3YnlaL5QYAUpcJoYGbkKXc3G+vVnrPtvSFw4bL0yYmDEmlFSgPeDzd13r7yaTbS5PA55ah+r3QlamIhgg+L09sNhTodhz0fbTJ+Hffj7adcOr5/K0gfErHW0Sx3Fy0p5egTWHKx2Bwe5N1NOcSJdaZlBXQyxdP5vGV309eU4uJK+nlOr3zw7u2SafcCUgC4Az4mBRKePERqRuzjxO3jsv8zB1s8KD3SVcPp362rLp4ok0Cl4rp6vta6muyqaWPSceFRjyI2fcEYdNiKSmcTNFUaoPo/JcR9eNK5cuUIx9CSxT88GkFLQ0HtCPfVX3T933I1VlNfo+g2AAGO9Qb/sjAVA4CZwUThZnwYJMPPnRdnazs6nQOH38YePjCjH41mb2o3MaVgLI5SzgZEXOxHNEIops3gQfEIAp0si0oRBzF87BN2Edpzov4IOaL9EKIMwJcYIclaPRONm/kPwOC32Q8lEAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20folderName%20%3D%20%2200_USO%22%3B%0Avar%20parentFolderId%20%3D%20getBookmarksFolderId%281%2C%20folderName%29%3B%20%0A%21parentFolderId%20%26%26%20PlacesUtils.bookmarks.createFolder%283%2C%20folderName%2C%20-1%29%3B%0Avar%20parentFolderId%20%3D%20getBookmarksFolderId%281%2C%20folderName%29%3B%0A%0Afor%28var%20tab%20of%20%5B...gBrowser.tabs%5D%29%20PlacesUtils.bookmarks.insertBookmark%28%0A%20%20%20%20parentFolderId%2C%20tab.linkedBrowser.currentURI%2C%20-1%2C%20tab.label%0A%29%2C%20gBrowser.removeTab%28tab%29%3B%0A%0A%0Afunction%20getBookmarksFolderId%28id%2C%20folderName%29%20%7B%0A%20%20%20var%20res%20%3D%20false%3B%20%0A%20%20%20%20%20%20%0A%20%20%20%28function%20f%28id%29%20%7B%20%0A%20%20%20%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28id%29.root%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%20folder.QueryInterface%28Ci.nsINavHistoryContainerResultNode%29%3B%0A%20%20%20%20%20%20folder.containerOpen%20%3D%20true%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20folder.childCount%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20child%20%3D%20folder.getChild%28i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21PlacesUtils.nodeIsFolder%28child%29%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20child.title%20%3D%3D%20folderName%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20child.itemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20f%28child.itemId%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20folder.containerOpen%20%3D%20false%0A%20%20%20%20%20%7D%29%28id%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20return%20res%3B%20%0A%7D%3B%0A%0A%0A//var%20parentFolderId%20%3D%20%u25A1%u25A1%3B%0A%0Afor%28var%20tab%20of%20%5B...gBrowser.tabs%5D%29%20PlacesUtils.bookmarks.insertBookmark%28%0A%20%20%20%20parentFolderId%2C%20tab.linkedBrowser.currentURI%2C%20-1%2C%20tab.label%0A%29%2C%20gBrowser.removeTab%28tab%29%3B%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
SeaMonkey 2.39 forever
Отсутствует
было бы неплохо добавлять все ярлыки сверху списка содержимого подпапки закладок, а не в его далеком хвосте..
var folderName = "qwerty"; var folderId = getBookFolderId(folderName); if ( !folderId ) { PlacesUtils.bookmarks.createFolder(3, folderName, -1); var folderId = getBookFolderId(folderName); }; for(var tab of [...gBrowser.tabs]) PlacesUtils.bookmarks.insertBookmark( folderId, tab.linkedBrowser.currentURI, 0, tab.label ), gBrowser.removeTab(tab); function getBookFolderId(folderName, id = 3, res = false) { var folder = PlacesUtils.getFolderContents(id).root; folder.QueryInterface(Ci.nsINavHistoryContainerResultNode); folder.containerOpen = true; for ( var i = 0; i < folder.childCount; i++ ) { var child = folder.getChild(i); if ( child.title == folderName ) { res = child.itemId; break; } } folder.containerOpen = false return res; }
Добавлено 18-02-2016 20:04:23
каждый раз создается лишний ярлык "Загрузка…" с адресом "about:blank"
Не наблюдаю
Отредактировано bunda1 (18-02-2016 20:04:23)
Отсутствует
bunda1, можно в ссылке выделить часть текста и скопировать.
Проверил на FF45 вроде работает.
Проверил сейчас на FF 44.0.2 и Custom Buttons 0.0.5.8.3 - кнопка какая-то серая, как будто неактивная, из-за чего это может быть?
var listener = { handleEvent: function(event) { content.removeEventListener(event.type, this, false); switch(event.type) { case "dragstart": if(even event.preventDefault(); break; } } } addEventListener("dragstart", listener, true);t.view.top != content) return; event.preventDefault(); var utils = document.commandDispatcher.focusedWindow. QueryInterface(Components.interfaces.nsIInterfaceRequestor). getInterface(Components.interfaces.nsIDOMWindowUtils); utils.sendMouseEvent("mousedown", event.clientX, event.clientY, event.button, 1, utils.MODIFIER_ALT); this.target = event.target; content.addEventListener("click", this, false); content.addEventListener("mouseup", this, false); break; case "mouseup": if(event.target != this.target) content.removeEventListener("click", this, false); break; case "click":
Отсутствует
кнопка какая-то серая, как будто неактивная, из-за чего это может быть?
Ты не весь код скопировал. Вот так нужно:
var listener = { handleEvent: function(event) { content.removeEventListener(event.type, this, false); switch(event.type) { case "dragstart": if(event.view.top != content) return; event.preventDefault(); var utils = document.commandDispatcher.focusedWindow. QueryInterface(Components.interfaces.nsIInterfaceRequestor). getInterface(Components.interfaces.nsIDOMWindowUtils); utils.sendMouseEvent("mousedown", event.clientX, event.clientY, event.button, 1, utils.MODIFIER_ALT); this.target = event.target; content.addEventListener("click", this, false); content.addEventListener("mouseup", this, false); break; case "mouseup": if(event.target != this.target) content.removeEventListener("click", this, false); break; case "click": event.preventDefault(); break; } } } addEventListener("dragstart", listener, true);
Отсутствует
Не наблюдаю
спасибо,
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%3ESession2bm%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAEVUlEQVR4XqWUf0xVZRjHv+/5ce/h3gsXrxZcvJQgXBFcgjrNJcJac07KSXNrWjL/EKyV6WprKdMgchW0pLRYKqlLi37aJrXmgkqWBKQJkgnKvCAKYrircX+ce885Ty/s3oWTNh3P9tnOH+f9PN+953kO27VGsAPYIDC2hRiLZ2S8/+IRvRSTLO7Dq0kPZu7MW1nserRgnc0SN2Vz9VrxqUmLRVEuzlyQb/Z7GhD29iB70TKrwLCLy+VJiQ09HDI0jXcwYWSgA1arBQnTZ9oBbKx9jT1x6A3zyb0bmXzPYs7Bs63HA3Gp+bAmZOFWXysycnItZgeqTErs50SYz5KQcu+JCaXDg57qph8+C0pT3DA7ZqBvqAmOmVOVVUVbYpzJaSrT8BDutYhoDD4dq3cXmfyf7nRQ/d5kGu4pId/ll+jX1W46JjOtXhB2ExHuFgGRss8yTsekhG5Oc5kpZ3EWApdPoXX5AeCXIWQmukRdoGf37WBFHPlu7xi1O9gjBJzOzE67b3Z2BvO2daNzVQccwzJc1nicv34V8SUZUlJy8oeixHq5fPVdiQUR28Bk60C/19dZc0rzPN+L9DgnJCagY6gfyZVuZGxyYemKZ6zLCtc7pyU4Dx2sEFt5g7T/EzMiAgDsL2cuGJidWCl84XYkxg+rPgxLKlLeI1geEGE2WyCbrFBs8yBZcnDF8xc1N9T7Q+rIm4ZBbxe/TtqE4ijfieJ2XaSy2LxUlvRKLxMUgiSZx8QmDn+GLNkgW+cjTKn4o6Ux0NPZ5A2F1HIAB3kDNXIVt1eBrlcMbSUtY89yJlos0dmJ5gBjNmiaCoTOQEEjFi/NiVm5bqszfc6id0VRuFZbxrbzK1KEifcc/f6RYYim+/8byYhcEIKQzC4EfCpID4Gpv8OutGPJYwWWx9duthMTSu9IHIUMfPv3QJ9hUtIBELSwxiUGADN0TYcs+iBbZsF74xYMMgEgHsaGi3+2qJKAI/w6ghOKDQNfXzh3xi/HuMGYAiIDoRCXE0E3YnlaL5QYAUpcJoYGbkKXc3G+vVnrPtvSFw4bL0yYmDEmlFSgPeDzd13r7yaTbS5PA55ah+r3QlamIhgg+L09sNhTodhz0fbTJ+Hffj7adcOr5/K0gfErHW0Sx3Fy0p5egTWHKx2Bwe5N1NOcSJdaZlBXQyxdP5vGV309eU4uJK+nlOr3zw7u2SafcCUgC4Az4mBRKePERqRuzjxO3jsv8zB1s8KD3SVcPp362rLp4ok0Cl4rp6vta6muyqaWPSceFRjyI2fcEYdNiKSmcTNFUaoPo/JcR9eNK5cuUIx9CSxT88GkFLQ0HtCPfVX3T933I1VlNfo+g2AAGO9Qb/sjAVA4CZwUThZnwYJMPPnRdnazs6nQOH38YePjCjH41mb2o3MaVgLI5SzgZEXOxHNEIops3gQfEIAp0si0oRBzF87BN2Edpzov4IOaL9EKIMwJcYIclaPRONm/kPwOC32Q8lEAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20t%3Dnew%20Date%28%29%3B%0Avar%20y%3D1900+t.getYear%28%29%3B%0Avar%20min%3Dt.getMinutes%28%29%3B%20if%20%28min%3C10%29%7Bmin%3D%220%22+min%7D%3B%0Avar%20h%3Dt.getHours%28%29%3B%0Avar%20m%3Dt.getMonth%28%29+1%3B%20//switch%28m%29%7Bcase%200%3A%20m%3D%22Jan%22%3Bbreak%3Bcase%201%3A%20m%3D%22Feb%22%3Bbreak%3Bcase%202%3A%20m%3D%22Mar%22%3Bbreak%3Bcase%203%3A%20m%3D%22Apr%22%3Bbreak%3Bcase%204%3A%20m%3D%22May%22%3Bbreak%3Bcase%205%3A%20m%3D%22Jun%22%3Bbreak%3Bcase%206%3A%20m%3D%22Jul%22%3Bbreak%3Bcase%207%3A%20m%3D%22Aug%22%3Bbreak%3Bcase%208%3A%20m%3D%22Sep%22%3Bbreak%3Bcase%209%3A%20m%3D%22Oct%22%3Bbreak%3Bcase%2010%3A%20m%3D%22Nov%22%3Bbreak%3Bdefault%3A%20m%3D%22Dec%22%3B%7D%0Avar%20d%3Dt.getDate%28%29%3B%0Avar%20curdate%3Dy+%22-%22+d+%22-%22+m+%22_%22+h+%22-%22+min%3B%0Avar%20folderName%20%3D%20curdate%3B%20//%2200_USO%22%3B%0A%0Afor%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20gBrowser.tabs.length%3B%20i++%29%20%7B%20gBrowser.getBrowserAtIndex%28i%29.stop%28%29%20%7D%3B%0A%0Avar%20folderId%20%3D%20getBookFolderId%28folderName%29%3B%0Aif%20%28%20%21folderId%20%29%20%7B%20%0A%20%20%20%20%20PlacesUtils.bookmarks.createFolder%283%2C%20folderName%2C%20-1%29%3B%0A%20%20%20%20%20var%20folderId%20%3D%20getBookFolderId%28folderName%29%3B%0A%20%20%20%20%20%7D%3B%0A%0Afor%28var%20tab%20of%20%5B...gBrowser.tabs%5D%29%20PlacesUtils.bookmarks.insertBookmark%28%0A%20%20%20%20folderId%2C%20tab.linkedBrowser.currentURI%2C%200%2C%20tab.label%0A%29%2C%20PlacesUtils.history.QueryInterface%28Ci.nsIBrowserHistory%29.removePage%28tab.linkedBrowser.currentURI%29%2C%20gBrowser.removeTab%28tab%29%3B%0A%0A/*%0Avar%20uri%20%3D%20makeURI%28%22https%3A//developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIBrowserHistory%23removePage%28%29%22%29%3B%0APlacesUtils.history.QueryInterface%28Ci.nsIBrowserHistory%29.removePage%28uri%29%3B%0A*/%0A%0Afunction%20getBookFolderId%28folderName%2C%20id%20%3D%203%2C%20res%20%3D%20false%29%20%7B%0A%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28id%29.root%3B%0A%20%20%20folder.QueryInterface%28Ci.nsINavHistoryContainerResultNode%29%3B%0A%20%20%20folder.containerOpen%20%3D%20true%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20folder.childCount%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20child%20%3D%20folder.getChild%28i%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20if%20%28%20child.title%20%3D%3D%20folderName%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20child.itemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20folder.containerOpen%20%3D%20false%0A%20%20%20%20%20%20%0A%20%20%20return%20res%3B%20%0A%7D%0A%0Avar%20ss%20%3D%20Cc%5B%22@mozilla.org/suite/sessionstore%3B1%22%5D.getService%28Ci.nsISessionStore%29%3B%0Avar%20count%20%3D%20ss.getClosedTabCount%28window%29%3B%0Awhile%28count--%29%20ss.forgetClosedTab%28window%2C%20count%29%3B%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
var t=new Date(); var y=1900+t.getYear(); var min=t.getMinutes(); if (min<10){min="0"+min}; var h=t.getHours(); var m=t.getMonth()+1; //switch(m){case 0: m="Jan";break;case 1: m="Feb";break;case 2: m="Mar";break;case 3: m="Apr";break;case 4: m="May";break;case 5: m="Jun";break;case 6: m="Jul";break;case 7: m="Aug";break;case 8: m="Sep";break;case 9: m="Oct";break;case 10: m="Nov";break;default: m="Dec";} var d=t.getDate(); var curdate=y+"-"+d+"-"+m+"_"+h+"-"+min; var folderName = curdate; //"00_USO";
, но чтобы рут -папку для сохранения можно было в коде прописать, и как тут формат "00" для месяца и числа прописать?
Отредактировано emlen (19-02-2016 01:52:27)
SeaMonkey 2.39 forever
Отсутствует
emlen
Наводишь Attributes Inspector на Панель меню > Закладки > Папка
Жмешь Ctrl+ЛКМ или СКМ. Откроется DOM Inspector.
В окне DOM Inspector'а, с правой стороны, Объект Javascript > _placesNode > itemId
делаю все по инструкции, после выбора Объект Javascript все переключается в дом инспекторе на другой режим - где я никак не могу найти > _placesNode > itemId
и где можно поискать поддерживаемые методы PlacesUtils.history.QueryInterface(Ci.nsIBrowserHistory). ?
Отредактировано emlen (18-02-2016 23:47:32)
SeaMonkey 2.39 forever
Отсутствует
Отсутствует
Может кому надо:
// Сохранять изображение без запроса в указанную папку из контекстного меню, от 19.02.2016. ............... ((contextMenu, viewimage) => { var mItem = contextMenu.insertBefore(document.createElement("menuitem"), viewimage); mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()); addDestructor(()=> mItem.remove() ); addEventListener("popupshowing", e=> mItem.hidden = viewimage.hidden, false, contextMenu); mItem.onclick =e=> { if ( e.button ) { setPath(); return; } var run = cbu.getPrefs("browser.download.folderList"), use = cbu.getPrefs("browser.download.useDownloadDir"), dir = gPrefService.getComplexValue("browser.download.dir", Ci.nsISupportsString).data; cbu.setPrefs("browser.download.folderList", 2); cbu.setPrefs("browser.download.useDownloadDir", true); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", getPath()) ); saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); cbu.setPrefs("browser.download.folderList", run); cbu.setPrefs("browser.download.useDownloadDir", use); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir) ); } function setPath() { var fp = window.makeFilePicker(); fp.init( window, "Укажите путь к папке для сохранения изображений", fp.modeGetFolder ); fp.open( result => result == fp.returnOK && cbu.setPrefs("CB.pathToImageFolder", convertFromUnicode("UTF-8", fp.file.path)) || mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()) ); }; function getPath() { try { var path = gPrefService.getComplexValue("CB.pathToImageFolder", Ci.nsISupportsString).data; } catch(e) { var path = 'C:\\qwerty'; }; return path; }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-viewimageinfo"));
Код создаёт в контекстном меня изображений пункт меню Сохранить в папку: который даёт возможность сохранять изображение без запроса в указанную папку, ПКМ на пункте меню даёт возможность быстро изменить папку для сохранения изображений.
Отсутствует
bunda1, полезная штука, только после выбора папки остается пункт меню Сохранить в папку: qwerty. Ну и собственно ничего не сохраняется. Прошу порт под симанку с CB v.0.0.5.8.1))) И встречный вопрос, можно сделать подобное множественным меню? чтобы был выбор из нескольких папок..
Добавлено 19-02-2016 14:31:34
Dumby, а можно как-то перед forgetClosedTab() из Session store API еще вытащить адрес закрытого таба? Вроде по наитию просится что-то типа getClosedTabData(), вот только не пойму как это делается P.S.: даже не, погорячился, не адрес, а адреса с историей закрытого таба..
Отредактировано emlen (19-02-2016 14:37:29)
SeaMonkey 2.39 forever
Отсутствует
только после выбора папки остается пункт меню Сохранить в папку: qwerty.
Да там была ошибка я это исправил: Сегодня 12:44:05
Отсутствует
так↓
var folderName = "00_USO"; var parentFolderId = PlacesUtils.toolbarFolderId; var folderId; var parentFolder = PlacesUtils.getFolderContents(parentFolderId, true, false).root; for(var ind = 0; ind < parentFolder.childCount; ind++) { var child = parentFolder.getChild(ind); if (child.title == folderName) {folderId = child.itemId; break;} } parentFolder.containerOpen = false; if (!folderId) folderId = PlacesUtils.bookmarks.createFolder(parentFolderId, folderName, -1); var dateString = new Date().toLocaleFormat("%Y-%m-%d %H:%M:%S"); var skipPrefixsList = [ "chrome://sstart/content/sstart.html", "about:blank" ]; var subFolderId = PlacesUtils.bookmarks.createFolder(folderId, dateString, 0); var ss = Cc["@mozilla.org/suite/sessionstore;1"].getService(Ci.nsISessionStore); for(var tab of [...gBrowser.tabs]) { tab.linkedBrowser.stop(); var uri = tab.linkedBrowser.currentURI; skipPrefixsList.some(prefix => uri.spec.startsWith(prefix)) || PlacesUtils.bookmarks.insertBookmark(subFolderId, uri, -1, tab.label); PlacesUtils.bhistory.removePage(uri); gBrowser.removeTab(tab); ss.forgetClosedTab(window, 0); }
а можно как-то перед forgetClosedTab() из Session store API еще вытащить адрес закрытого таба? Вроде по наитию просится что-то типа getClosedTabData(), вот только не пойму как это делается P.S.: даже не, погорячился, не адрес, а адреса с историей закрытого таба..
DOM Inspector для кого писали? Закрой вкладок и запусти код
inspectObject( JSON.parse( Cc["@mozilla.org/suite/sessionstore;1"] .getService(Ci.nsISessionStore) .getClosedTabData(window) ) );
Отсутствует
Как попёрли, одна за одной...
Версия 0.0.5.8.5 Выпущено February 18, 2016 122.2 kB Работает с Firefox 1.5 и выше, SeaMonkey 2.0 и выше, Thunderbird 2.0 и выше
# Исправлено: невозможно изменить внешний редактор если он был деинсталлирован или путь к нему изменился
Отсутствует
для этого я использую расширение firegestures. а именно контекстное меню с списком вкладок у меня появляется при зажатой ПКМ и колесиком вниз. очень удобно
За дополнение спасибо! Но хотелось бы, чтобы при отпускании кнопки меню не исчезало и напротив каждой строки был бы крестик для закрытия вкладки, чтобы можно было выборочно закрывать вкладки без повторного вызова меню. Как это реализовать с помощью CB?
Три студента и лопата заменяют экскаватор
Отсутствует
emlen пишеттолько после выбора папки остается пункт меню Сохранить в папку: qwerty.
Да там была ошибка я это исправил: Сегодня 12:44:05
Прошел по ссылке, поменял код, все осталось по прежнему(((
// Сохранять изображение без запроса в указанную папку из контекстного меню, от 19.02.2016. ............... ((contextMenu, viewimage) => { var mItem = contextMenu.insertBefore(document.createElement("menuitem"), viewimage); mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()); addDestructor(()=> mItem.remove() ); addEventListener("popupshowing", e=> mItem.hidden = viewimage.hidden, false, contextMenu); mItem.onclick =e=> { if ( e.button ) { setPath(); return; } var run = cbu.getPrefs("browser.download.folderList"), use = cbu.getPrefs("browser.download.useDownloadDir"), dir = gPrefService.getComplexValue("browser.download.dir", Ci.nsISupportsString).data; cbu.setPrefs("browser.download.folderList", 2); cbu.setPrefs("browser.download.useDownloadDir", true); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", getPath()) ); saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); cbu.setPrefs("browser.download.folderList", run); cbu.setPrefs("browser.download.useDownloadDir", use); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir) ); } function setPath() { var fp = window.makeFilePicker(); fp.init( window, "Укажите путь к папке для сохранения изображений", fp.modeGetFolder ); fp.open( result => result == fp.returnOK && cbu.setPrefs("CB.pathToImageFolder", convertFromUnicode("UTF-8", fp.file.path)) || mItem.setAttribute("label", "Сохранить в папку: " + getPath().split("\\").pop()) ); }; function getPath() { try { var path = gPrefService.getComplexValue("CB.pathToImageFolder", Ci.nsISupportsString).data; } catch(e) { var path = 'C:\\qwerty'; }; return path; }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-viewimageinfo"));
Добавлено 19-02-2016 22:25:54
Dumby, спасибо!
Отредактировано emlen (19-02-2016 22:25:54)
SeaMonkey 2.39 forever
Отсутствует