Страницы: 1
Доброго всем дня.
После обновления Firefox до 20 версии (Linux версия). Перестали работать кнопка QickBookmarks, которую я когда-то просил написать.
Суть кнопки такова: она выполняет роль своего рода "ящика для вкладок" - т.е. при перетаскивании вкладки на данную кнопку она пропадала из панели вкладок, а в кнопке появлялась ссылка на страницу, которая была открыта в вкладке, с сохранением местоположения. При открытии вкладки из кнопки ссылка в ней пропадала. При открытии ЛКМ ссылка открывалась в текущей вкладке, при нажатии средней клавиши - в новой, а при нажатии ПКМ по ссылке последняя удалялась.
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
this. addMenuitem (tab, url);
};
this. __defineGetter__
(
"ss",
function ()
{
delete this.ss;
return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
}
);
this. __defineGetter__
(
"ios",
function ()
{
delete this.ios;
return this.ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
}
);
this. addMenuitem = function (tab, url)
{
var label = tab. label;
var image = tab. image;
var menu = this. menu;
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("tab_data", this.ss.getTabState(tab));
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu (menu);
var br = gBrowser;
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
};
this. deleteMenuitem = function (menuitem, dontFlush)
{
var menu = this. menu;
menu. removeChild (menuitem);
this. checkEmpty (menu);
!dontFlush && this. flushMenu (menu);
};
this. checkEmpty = function (menu)
{
if (menu. getElementsByTagName ("menuitem"). length > 0)
return;
menu. hidePopup ();
this. type = "";
};
this. flushMenu = function (menu)
{
menu = menu || this. menu;
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. menu;
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. __defineGetter__
(
"menu",
function ()
{
return this. getElementsByTagName("menupopup") [0] || null;
}
);
this. openTab = function (event, mi)
{
mi = mi || event. target;
var bg = event ? this. loadInBackground : true;
var menu = mi. parentNode;
if (!event || event. button < 2)
{
var tab;
if (event && event. button == 0)
tab = gBrowser. mCurrentTab;
else
tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
menu. hidePopup ();
var tabData = mi. getAttribute ("tab_data");
this.ss.setTabState(tab, tabData);
if(this.reload && !this.ios.offline)
{
var wn = Components.interfaces.nsIWebNavigation;
gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE);
}
}
else
event. stopPropagation ();
this. deleteMenuitem (mi, !event);
};
this. onclick = function (event)
{
if (event. button != 1 || event. target != this)
return;
var menu = this. menu;
var mis = menu. getElementsByTagName ("menuitem");
while (mis. length)
this. openTab (null, mis[0]);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();
Заранее спасибо
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Najlus
Вроде, заработала кнопка:
--- a/qickBookmarks.js +++ b/qickBookmarks.js @@ -58,14 +58,17 @@ mi. setAttribute ("tab_data", this.ss.getTabState(tab)); mi. setAttribute ("tooltiptext", url); mi. className = "menuitem-iconic bookmark-item"; - image && mi. setAttribute ("image", "moz-anno:favicon:" + image); + image && mi. setAttribute ("image", "moz-anno:favicon:" + image.replace(/#-moz-resolution=16,16$/, "")); menu. appendChild (mi); this. type = "menu"; this. flushMenu (menu); var br = gBrowser; //if (br. tabContainer. childNodes. length > 1) - br. removeTab (tab); + //br. removeTab (tab); + setTimeout(function() { + br. removeTab (tab); + }, 0); }; this. deleteMenuitem = function (menuitem, dontFlush) @@ -119,7 +122,8 @@ createInstance (Components. interfaces. nsIScriptableUnicodeConverter); suc. charset = "UTF-8"; menu = suc. ConvertToUnicode (menu); - menu = new XML (menu) || ""; + //menu = new XML (menu) || ""; + menu = new DOMParser (). parseFromString (menu, "application/xml"). documentElement; } catch (e) { @@ -127,11 +131,13 @@ } if (!menu) { - menu = - <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - onclick="this. parentNode. openTab (event);"/> + //menu = + //<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + // onclick="this. parentNode. openTab (event);"/> + menu = document.createElement("menupopup"); + menu.setAttribute("onclick", "this. parentNode. openTab (event);"); } - menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; + //menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; this. appendChild (menu); if (menu. getElementsByTagName ("menuitem"). length > 0) this. type = "menu";
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsILocalFile) .path; var path = profileDir + "\\tabbookmarks.xml"; this. loadInBackground = true; this. reload = true; this. handleDragOver = function (event) { var dt = event. dataTransfer; var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0); if (!tab) return; event. preventDefault (); event. stopPropagation (); return dt. effectAllowed = dt. dropEffect = "link"; } this. handleDrop = function (event) { var dt = event. dataTransfer; var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0); var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0); this. addMenuitem (tab, url); }; this. __defineGetter__ ( "ss", function () { delete this.ss; return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"] .getService(Components.interfaces.nsISessionStore); } ); this. __defineGetter__ ( "ios", function () { delete this.ios; return this.ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); } ); this. addMenuitem = function (tab, url) { var label = tab. label; var image = tab. image; var menu = this. menu; var mi = document. createElement ("menuitem"); mi. setAttribute ("label", label); mi. setAttribute ("tab_data", this.ss.getTabState(tab)); mi. setAttribute ("tooltiptext", url); mi. className = "menuitem-iconic bookmark-item"; image && mi. setAttribute ("image", "moz-anno:favicon:" + image.replace(/#-moz-resolution=16,16$/, "")); menu. appendChild (mi); this. type = "menu"; this. flushMenu (menu); var br = gBrowser; //if (br. tabContainer. childNodes. length > 1) //br. removeTab (tab); setTimeout(function() { br. removeTab (tab); }, 0); }; this. deleteMenuitem = function (menuitem, dontFlush) { var menu = this. menu; menu. removeChild (menuitem); this. checkEmpty (menu); !dontFlush && this. flushMenu (menu); }; this. checkEmpty = function (menu) { if (menu. getElementsByTagName ("menuitem"). length > 0) return; menu. hidePopup (); this. type = ""; }; this. flushMenu = function (menu) { menu = menu || this. menu; var xs = new XMLSerializer (); var xmenu = xs. serializeToString (menu); var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); suc. charset = "UTF-8"; xmenu = suc. ConvertFromUnicode (xmenu); custombuttons. writeFile (path, xmenu); }; this. getMenu = function (event) { var menu = this. menu; if (menu) this. removeChild (menu); menu = ""; try { file = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile); file. initWithPath (path); var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"]. createInstance (Components. interfaces. nsIFileInputStream); fis.init (file, 0x01, 00004, null); var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"]. createInstance (Components. interfaces. nsIScriptableInputStream); sis. init (fis); menu = sis. read (sis. available ()); sis. close (); var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); suc. charset = "UTF-8"; menu = suc. ConvertToUnicode (menu); //menu = new XML (menu) || ""; menu = new DOMParser (). parseFromString (menu, "application/xml"). documentElement; } catch (e) { menu = ""; } if (!menu) { //menu = //<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" // onclick="this. parentNode. openTab (event);"/> menu = document.createElement("menupopup"); menu.setAttribute("onclick", "this. parentNode. openTab (event);"); } //menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; this. appendChild (menu); if (menu. getElementsByTagName ("menuitem"). length > 0) this. type = "menu"; this. orient = "horizontal"; return menu; }; this. __defineGetter__ ( "menu", function () { return this. getElementsByTagName("menupopup") [0] || null; } ); this. openTab = function (event, mi) { mi = mi || event. target; var bg = event ? this. loadInBackground : true; var menu = mi. parentNode; if (!event || event. button < 2) { var tab; if (event && event. button == 0) tab = gBrowser. mCurrentTab; else tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false); menu. hidePopup (); var tabData = mi. getAttribute ("tab_data"); this.ss.setTabState(tab, tabData); if(this.reload && !this.ios.offline) { var wn = Components.interfaces.nsIWebNavigation; gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE); } } else event. stopPropagation (); this. deleteMenuitem (mi, !event); }; this. onclick = function (event) { if (event. button != 1 || event. target != this) return; var menu = this. menu; var mis = menu. getElementsByTagName ("menuitem"); while (mis. length) this. openTab (null, mis[0]); this. flushMenu (menu); }; this. setAttribute ("ondragdrop", "return this. handleDrop (event);"); this. setAttribute ("ondragover", "return this. handleDragOver (event);"); this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);"); this. getMenu ();
Отредактировано Infocatcher (04-04-2013 14:50:06)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Спасибо, заработала, но: при открытии ссылки в текущей вкладке вкладка перезагружается, но новая страница не загружается. При удалении закладки при помощи ПКМ ссылка убирается, но при этом список закрывается и появляется контекстное меню, что не совсем удобно.
Плюс довольно старнный глюк (Хотя скорее проблема в самом Custom Buttons) - после сохранения кода ничего нельзя редактировать - при открытии код выстраивается в одну строку и при последующем сохранении кнопка прекращает работать и её становится невозможным удалить.
И еще есть Session Bookmarks с похожим функционалом.
Всё же немного не то - после открытия ссылки остаются.
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Плюс довольно старнный глюк (Хотя скорее проблема в самом Custom Buttons) - после сохранения кода ничего нельзя редактировать - при открытии код выстраивается в одну строку и при последующем сохранении кнопка прекращает работать и её становится невозможным удалить.
https://forum.mozilla-russia.org/viewto … 60#p607960
Всё же немного не то - после открытия ссылки остаются.
Там можно поменять:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
При удалении закладки при помощи ПКМ ссылка убирается, но при этом список закрывается и появляется контекстное меню, что не совсем удобно.
--- a/qickBookmarks.js +++ b/qickBookmarks.js @@ -177,7 +177,10 @@ } else event. stopPropagation (); - this. deleteMenuitem (mi, !event); + //this. deleteMenuitem (mi, !event); + setTimeout(function() { + this. deleteMenuitem (mi, !event); + }.bind(this), 0); }; this. onclick = function (event) @@ -189,6 +192,13 @@ while (mis. length) this. openTab (null, mis[0]); this. flushMenu (menu); +}; +this.oncontextmenu = function(e) { + if( + !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey + && e.target.localName == "menuitem" + ) + e.preventDefault(); }; this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
при открытии ссылки в текущей вкладке вкладка перезагружается, но новая страница не загружается.
Пришлось скопировать кусок из Session Bookmarks
--- a/qickBookmarks.js +++ b/qickBookmarks.js @@ -168,11 +168,27 @@ tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false); menu. hidePopup (); var tabData = mi. getAttribute ("tab_data"); + if(this.reload && !this.ios.offline) { + //var wn = Components.interfaces.nsIWebNavigation; + //gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE); + tab.linkedBrowser.addProgressListener(this.progressListener); + } this.ss.setTabState(tab, tabData); - if(this.reload && !this.ios.offline) - { - var wn = Components.interfaces.nsIWebNavigation; - gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE); + + // Following is part of Session Bookmarks 0.2.1pre - 2013-04-01 + // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks + if( + tab != gBrowser.selectedTab // Should be loaded automatically in this case + && ( + tab.getAttribute("pending") == "true" // Gecko >= 9.0 + || tab.linkedBrowser.contentDocument.readyState == "uninitialized" + // || tab.linkedBrowser.__SS_restoreState == 1 + ) + ) { + tab.linkedBrowser.reload(); + // Show "Connecting…" instead of "New Tab" + // (disable browser.sessionstore.restore_on_demand to see this bug) + gBrowser.setTabTitleLoading && gBrowser.setTabTitleLoading(tab); } } else @@ -181,6 +197,40 @@ setTimeout(function() { this. deleteMenuitem (mi, !event); }.bind(this), 0); +}; + +this.progressListener = { + // Part of Session Bookmarks 0.2.1pre - 2013-04-01 + // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks + // Based on code of Session Manager 0.7.5 + 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) { + try { + if(aRequest.name == "about:blank") + return; + } + catch(e) { // view-source: protocol + if(e.name != "NS_ERROR_NOT_IMPLEMENTED") + Components.utils.reportError(e); + } + var wpl = Components.interfaces.nsIWebProgressListener; + if(aFlag & wpl.STATE_START) // Force load to bypass cache + aRequest.loadFlags |= aRequest.LOAD_BYPASS_CACHE; + else if(aFlag & wpl.STATE_STOP && aFlag & wpl.STATE_IS_NETWORK) + 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) {} }; this. onclick = function (event)
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsILocalFile) .path; var path = profileDir + "\\tabbookmarks.xml"; this. loadInBackground = true; this. reload = true; this. handleDragOver = function (event) { var dt = event. dataTransfer; var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0); if (!tab) return; event. preventDefault (); event. stopPropagation (); return dt. effectAllowed = dt. dropEffect = "link"; } this. handleDrop = function (event) { var dt = event. dataTransfer; var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0); var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0); this. addMenuitem (tab, url); }; this. __defineGetter__ ( "ss", function () { delete this.ss; return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"] .getService(Components.interfaces.nsISessionStore); } ); this. __defineGetter__ ( "ios", function () { delete this.ios; return this.ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); } ); this. addMenuitem = function (tab, url) { var label = tab. label; var image = tab. image; var menu = this. menu; var mi = document. createElement ("menuitem"); mi. setAttribute ("label", label); mi. setAttribute ("tab_data", this.ss.getTabState(tab)); mi. setAttribute ("tooltiptext", url); mi. className = "menuitem-iconic bookmark-item"; image && mi. setAttribute ("image", "moz-anno:favicon:" + image.replace(/#-moz-resolution=16,16$/, "")); menu. appendChild (mi); this. type = "menu"; this. flushMenu (menu); var br = gBrowser; //if (br. tabContainer. childNodes. length > 1) //br. removeTab (tab); setTimeout(function() { br. removeTab (tab); }, 0); }; this. deleteMenuitem = function (menuitem, dontFlush) { var menu = this. menu; menu. removeChild (menuitem); this. checkEmpty (menu); !dontFlush && this. flushMenu (menu); }; this. checkEmpty = function (menu) { if (menu. getElementsByTagName ("menuitem"). length > 0) return; menu. hidePopup (); this. type = ""; }; this. flushMenu = function (menu) { menu = menu || this. menu; var xs = new XMLSerializer (); var xmenu = xs. serializeToString (menu); var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); suc. charset = "UTF-8"; xmenu = suc. ConvertFromUnicode (xmenu); custombuttons. writeFile (path, xmenu); }; this. getMenu = function (event) { var menu = this. menu; if (menu) this. removeChild (menu); menu = ""; try { file = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile); file. initWithPath (path); var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"]. createInstance (Components. interfaces. nsIFileInputStream); fis.init (file, 0x01, 00004, null); var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"]. createInstance (Components. interfaces. nsIScriptableInputStream); sis. init (fis); menu = sis. read (sis. available ()); sis. close (); var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); suc. charset = "UTF-8"; menu = suc. ConvertToUnicode (menu); //menu = new XML (menu) || ""; menu = new DOMParser (). parseFromString (menu, "application/xml"). documentElement; } catch (e) { menu = ""; } if (!menu) { //menu = //<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" // onclick="this. parentNode. openTab (event);"/> menu = document.createElement("menupopup"); menu.setAttribute("onclick", "this. parentNode. openTab (event);"); } //menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; this. appendChild (menu); if (menu. getElementsByTagName ("menuitem"). length > 0) this. type = "menu"; this. orient = "horizontal"; return menu; }; this. __defineGetter__ ( "menu", function () { return this. getElementsByTagName("menupopup") [0] || null; } ); this. openTab = function (event, mi) { mi = mi || event. target; var bg = event ? this. loadInBackground : true; var menu = mi. parentNode; if (!event || event. button < 2) { var tab; if (event && event. button == 0) tab = gBrowser. mCurrentTab; else tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false); menu. hidePopup (); var tabData = mi. getAttribute ("tab_data"); if(this.reload && !this.ios.offline) { //var wn = Components.interfaces.nsIWebNavigation; //gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE); tab.linkedBrowser.addProgressListener(this.progressListener); } this.ss.setTabState(tab, tabData); // Following is part of Session Bookmarks 0.2.1pre - 2013-04-01 // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks if( tab != gBrowser.selectedTab // Should be loaded automatically in this case && ( tab.getAttribute("pending") == "true" // Gecko >= 9.0 || tab.linkedBrowser.contentDocument.readyState == "uninitialized" // || tab.linkedBrowser.__SS_restoreState == 1 ) ) { tab.linkedBrowser.reload(); // Show "Connecting…" instead of "New Tab" // (disable browser.sessionstore.restore_on_demand to see this bug) gBrowser.setTabTitleLoading && gBrowser.setTabTitleLoading(tab); } } else event. stopPropagation (); //this. deleteMenuitem (mi, !event); setTimeout(function() { this. deleteMenuitem (mi, !event); }.bind(this), 0); }; this.progressListener = { // Part of Session Bookmarks 0.2.1pre - 2013-04-01 // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks // Based on code of Session Manager 0.7.5 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) { try { if(aRequest.name == "about:blank") return; } catch(e) { // view-source: protocol if(e.name != "NS_ERROR_NOT_IMPLEMENTED") Components.utils.reportError(e); } var wpl = Components.interfaces.nsIWebProgressListener; if(aFlag & wpl.STATE_START) // Force load to bypass cache aRequest.loadFlags |= aRequest.LOAD_BYPASS_CACHE; else if(aFlag & wpl.STATE_STOP && aFlag & wpl.STATE_IS_NETWORK) 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) {} }; this. onclick = function (event) { if (event. button != 1 || event. target != this) return; var menu = this. menu; var mis = menu. getElementsByTagName ("menuitem"); while (mis. length) this. openTab (null, mis[0]); this. flushMenu (menu); }; this.oncontextmenu = function(e) { if( !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && e.target.localName == "menuitem" ) e.preventDefault(); }; this. setAttribute ("ondragdrop", "return this. handleDrop (event);"); this. setAttribute ("ondragover", "return this. handleDragOver (event);"); this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);"); this. getMenu ();
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Огромнейшее вам спасибо!
Session Bookmarks штука интересная, но немного не то: при добавлении закладки вкладка не убирается, да и что-то не нашёл я: есть ли там возможность явно указать используемый файл (например чтобы подцепить уже существующий)
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
при добавлении закладки вкладка не убирается
А я как-то больше к классическим закладкам привык.
Но это просто, почему бы и не добавить.
да и что-то не нашёл я: есть ли там возможность явно указать используемый файл (например чтобы подцепить уже существующий)
Применительно к QickBookmarks там другой формат файла.
Закладки хранятся в файле %профиль%/custombuttons/bookmarks-%N.txt, где %N – номер из идентификатора кнопки. Задается это вот тут.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1