Я знаю где это находится, но там сего несколько штук с осмысленными названиями, остальные с набором цифр…
Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Отсутствует
KOT040188
Сегодня 15:37:09
Отредактировано Stakhovsky (27-05-2016 14:54:25)
Отсутствует
Только там в папке extensions не все подписаны, неподписанные определить можно если перетащить в окно браузера, он предложит окно установки с названием, можно прочитать название и нажать отмена.
Вы уж извините, но я этим заниматься не хочу
KOT040188А у вас версия 6.8.8.8?
Да.
Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Отсутствует
Можно ли заменить эти расширения кнопками CB?
https://addons.mozilla.org/ru/firefox/a … r-youtube/
https://addons.mozilla.org/en-US/firefo … nd-resume/
Отсутствует
За кнопки не знаю,а для greasemonkey есть что то подобное
https://greasyfork.org/ru/scripts/4870-maximize-video
http://userscripts-mirror.org/scripts/show/58720
Отсутствует
Пора этой теме снова воскресать, так как, связи с переходом на FF57 много расширений отвалилось, а Custom Buttons стараниями наших уважаемых форумчан продолжает жить.
Многие скрипты в новой версии Greasemonkey для FF57 работают не коректно, а в Custom Buttons эти скрипты в основном идут без проблем
Вот пример - скрипты которые работают в Custom Buttons (нарыл на просторах интернета для FF57 на замену некоторых функций в устаревших расширениях Status -4-Evar и LocationBar)
1. Цветная полоса загрузки в адресной строке при загрузке страниц
//Полоса загрузки в адресной строке, цвет меняется в стиле от звездочки до звездочки (function(){ var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(17,238,238,.7) 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; transition: background-size 350ms ease 0s !important; } #urlbar:not([style="background-size: 0% 100%;"]) { animation: progress-bar-stripes 2s linear infinite; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
//Подчеркивание домена (function () { if (location != "chrome://browser/content/browser.xul") return; var URLBarInput = gURLBar.mInputField; var locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.display = "none"; URLBarInput.parentNode.addEventListener("click", function () { if (URLBarInput.style.display === "none") { URLBarInput.style.display = ""; locationBar.style.display = "none"; gURLBar.select(); } }, false); URLBarInput.parentNode.addEventListener("mouseout", function () { if (document.activeElement !== gURLBar.inputField) { locationBar.style.display = "none"; URLBarInput.style.display = ""; gURLBar._urlTooltip && gURLBar._hideURLTooltip(); } }, false); URLBarInput.addEventListener("mouseover", function (event) { if (event.ctrlKey || document.activeElement === gURLBar.inputField) { return; } locationBar.parentNode.removeChild(locationBar); locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.overflow = "hidden"; locationBar.style.width = URLBarInput.clientWidth + "px"; gURLBar.value.split("?")[0].split("/").map(function (value, index, arr) { return index + 1 === arr.length ? (gURLBar.value.split("?")[1] ? (value + "?" + gURLBar.value.split("?")[1]) : value) : value; }).map(function (value, index, arr) { var sec = locationBar.appendChild(document.createElement("label")); sec.style.margin = 0; sec.value = value; if (index < arr.length - 1) sec.value = value.replace(/[^\/]$/, "$&/"); index === 0 && (sec.style.marginLeft = "1px"); if (index === 0 && /:\/$/.test(sec.value)) { sec.value += "/"; } else { sec.onmouseover = function () { this.style.textDecoration = "underline"; this.style.cursor = "pointer"; } sec.onmouseout = function () { this.style.textDecoration = ""; } sec.onclick = function (event) { if (event.button === 0) { loadURI(URLBarInput.value.split(this.value)[0] + this.value); while (this.nextSibling) { this.nextSibling.parentNode.removeChild(this.nextSibling); } event.stopPropagation(); } } URLBarInput.style.display = "none"; locationBar.style.display = ""; } }) }, false); })();
Отсутствует
3. Осталось найти, может кто поможет, средствами кнопок или стилями
- создание адонбара
'Classic' CSS tweaks for Firefox 57+ - внутри архива есть файл userChrome.css. Начиная со строки 355 (версия 1.5.2) описывается создание аддон-бара. Если раскомментировать строку 361, в нижней части главного окна появляется эта самая панель, сам пользоваться ей не пробовал
- переноса кнопки Reload в адресную строку
Наверное, не совсем по теме, но существует дополнение - Reload in address bar. И делает оно то, о чём Вы спрашиваете
Цветная полоса загрузки в адресной строке при загрузке страниц
Отличная замена прогрессбара Объясните, если можно, подробнее - как поменять цвет заливки? Для определённости - основной цвет Hex #80ff80, rgb(128, 255, 128). Спасибо
Отредактировано Viatcheslav (19-12-2017 13:07:15)
Отсутствует
Viatcheslav
1. Поменять цвет заливки можно в 5 строке background-image, меняйте значения rgba, эксперементируйте.
2. Дополнение ради одной кнопки - это несерьезно
3. Про аддон-бар - я в курсе про этот ресурс, но как я понял, там имитация, а не полноценная замена, т.е. нельзя переносить эту панель ничего, только вручную прописывать в стиле, что не очень хорошо. Если я не прав, то поправьте.
Отсутствует
Нашел у alice0775 скрипт
Его смысл - создает в конце адресной строки дополнительную панель, на которую можно перемещать любые кнопки, в том числе и Feed-buton и Stop-Reload-buton
Вот что получилось
/*Initialization Code*/ var addToolbarInsideLocationBar = { init: function() { const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; Components.utils.import("resource:///modules/CustomizableUI.jsm"); //создаем toolbar let toolbar = document.createElementNS(kNSXUL, "toolbar"); toolbar.setAttribute("id", "ucjs-Locationbar-toolbar"); toolbar.setAttribute("customizable", "true"); toolbar.setAttribute("mode", "icons"); toolbar.setAttribute("iconsize", "small"); toolbar.setAttribute("context", "toolbar-context-menu"); toolbar.setAttribute("class", "toolbar-primary chromeclass-toolbar customization-target"); toolbar.setAttribute("fullscreentoolbar", "true"); toolbar.setAttribute("toolbarname", "Панель в LocationBar"); toolbar.setAttribute("toolboxid", "navigator-toolbox"); toolbar.setAttribute("hidden", "true"); setTimeout(function(){toolbar.removeAttribute("hidden");}, 0) // блокировать дублирование пункта при открытии настройки панелей if ( document.getElementById("ucjs-Locationbar-toolbar") ) return; //регистрируем toolbar.id if (CustomizableUI.getAreaType("ucjs-Locationbar-toolbar")) { } else try { CustomizableUI.registerArea("ucjs-Locationbar-toolbar", { type: CustomizableUI.TYPE_TOOLBAR, defaultPlacements: ["feed-button"] }); } catch(e) {} let ref = this.getInsertPoint(); ref.appendChild(toolbar); gURLBar.onDrop_addToolbarInsideLocationBar = gURLBar.onDrop; gURLBar.onDrop = function(event) { var toolbar = document.getElementById("ucjs-Locationbar-toolbar"); var target = event.originalTarget; while(target) { if (target == toolbar) { return; } target = target.parentNode; } gURLBar.onDrop_addToolbarInsideLocationBar(event); }; window.addEventListener("beforecustomization", this, true); // BookmarkingUI._updateCustomizationState(); }, getInsertPoint: function() { return (document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons") ); }, handleEvent: function(event) { let toolbar = document.getElementById("ucjs-Locationbar-toolbar"); switch(event.type) { case "beforecustomization": window.addEventListener("customizationending", this, false); this.placeholder = toolbar.parentNode.insertBefore(document.createElement("hbox"), toolbar); let ref = document.getElementById("nav-bar-customization-target"); toolbar.setAttribute("tooltiptext", "Toolbar inside LocationBar"); ref.parentNode.insertBefore(toolbar, ref); break; case "customizationending": window.removeEventListener("customizationending", this, false); this. placeholder.parentNode.replaceChild(toolbar, this. placeholder); toolbar.removeAttribute("tooltiptext"); break; } } }; addToolbarInsideLocationBar.init();
Отредактировано Andrey_Krropotkin (26-12-2017 22:23:26)
Отсутствует
3. Про аддон-бар - я в курсе про этот ресурс, но как я понял, там имитация, а не полноценная замена, т.е. нельзя переносить эту панель ничего, только вручную прописывать в стиле, что не очень хорошо. Если я не прав, то поправьте.
Да, всё верно. Я пробовал эту панель включать, но после появления кнопки на неё обычным "перетаскиванием" не переносятся - чистейшая эмуляция
Andrey_Krropotkin, помогите, пожалуйста, разобраться с работой прогресс-бара. Фрагмент кода, отвечающий за стиль, насколько я понял, такой:
background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(17,238,238,.7) 100%); background-size:0 0;
Отсутствует
3. Осталось найти, может кто поможет, средствами кнопок или стилями
- создание адонбара
Если я вас правильно понял, то посмотрите здесь: https://forum.mozilla-russia.org/viewto … 46#p748946
«The Truth Is Out There»
Отсутствует
то посмотрите здесь: https://forum.mozilla-russia.org/viewto … 46#p748946
Там такой же вариант эмуляции, а именно
имитация, а не полноценная замена, т.е. нельзя переносить эту панель ничего, только вручную прописывать в стиле
Отсутствует
Viatcheslav Я сам пока не разбирался, но вот посмотрите на статью где расписано все про linear-gradient
Отсутствует
а именно
https://forum.mozilla-russia.org/viewtopic.php?pid=748946#p748946
Все переносится через персонализацию.
Отредактировано mssign (20-12-2017 09:05:07)
Отсутствует
https://forum.mozilla-russia.org/viewtopic.php?pid=748946#p748946
Все переносится через персонализацию
Да, прошу прощение Или свой какой-то стиль блокировал, или версия панели ещё до исправления была... Короче, на чистом userChrome.css из архива Vitaliy V. аддон-бар включается, кнопки переносятся
Отсутствует
ViatcheslavПопробуй этот вариант
var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,"");
Отсутствует
ViatcheslavПопробуй этот вариант
скрытый текстВыделить кодКод:
var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,"");
Вообще не работает - по краней мере, никакого прогресс-бара в адресной строке нет
Отредактировано Viatcheslav (20-12-2017 10:58:57)
Отсутствует
Viatcheslav Я выложил кусок кода для замены в старом коде, а не для замены всего кода
Вот весь код кнопки
//Полоса загрузки в адресной строке (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; // transition: background-size 350ms ease 0s !important; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
Отредактировано Andrey_Krropotkin (20-12-2017 11:55:53)
Отсутствует
Я выложил кусок кода для замены в старом коде, а не для замены всего кода
Семён Семёныч, а я даже и не посмотрел
Вот весь код кнопки
скрытый текстВыделить кодКод:
//Полоса загрузки в адресной строке (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; // transition: background-size 350ms ease 0s !important; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
Ну так это совсем другое дело Благодарствую премного
UPDATE
Andrey_Krropotkin, не сочтите за дерзость - а можно добавить отображение степени загрузки страницы в %, как здесь - https://www.w3schools.com/howto/tryit.a … r_label_js? Для удобства метка пропадает в конце загрузки страницы вместе с прогресс-баром. Это было бы близким к совершенству
Отредактировано Viatcheslav (20-12-2017 13:37:08)
Отсутствует
Viatcheslav Не получается. Проценты накладываются на адрес и потом висят в адресной строке. Спросите у более опытных.
Отсутствует