Помогите пожалуйста разобраться. Вот код
function mainFunction() { addEventListener('mousedown', function(e) { el = "el"; setTimeout(function() { var a = "a"; }, 800) }) addEventListener('mouseup', function(e){ // Какие-то действия function restoreTarget() { var b = "b" } restoreTarget() }) if (...) obj.o n c l i c k = restoreTarget } mainFunction()
Как сделать чтобы переменные а , b, el были видны в соседних функциях и почему не выходит вызвать функцию restoreTarget() по событию onclick - она получается not defined?
Отредактировано beggrr (07-04-2014 13:47:55)
Отсутствует
А если бы я хотел обойтись без функции-оболочки mainFunction()?
Просто два листенера и после них условие if.
Тогда эти переменные стали бы глобальными, что нежелательно?
С помощью оператора return можно их как-то сделать видимыми для соседних функций, не делая глобальными?
А почему не получается вызвать функцию restoreTarget по событию онклик?
Мне нужно вызвать ее два раза: там где она вызывается сейчас, сразу после объявления и второй раз после условия if.
Я могу написать эту функцию два раза, и там и там, но почему вне листенера mouseup она not defined?
Отредактировано beggrr (07-04-2014 14:49:00)
Отсутствует
Я тут уже несколько дней питаюсь сделать индикатор загрузки страницы на каждой вкладке но не могу красиво добавить индикатор на вкладки. Добавить его легко:
var label = document.getAnonymousElementByAttribute( gBrowser.mCurrentTab, 'class', 'tab-text tab-label'); if ( label.lastChild ) label.removeChild( label.lastChild ); var progressmeter = document.createElement("progressmeter"); progressmeter.setAttribute("mode", "determined"); progressmeter.setAttribute("id", "progressmeterId"); progressmeter.setAttribute("value", "25"); label.appendChild( progressmeter ); // Css стиль для индикатора загрузки .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ progressmeter { min-width: 12px !important; min-height: 5px !important; height: 1px !important; }\ .progress-bar { min-width: 2px !important; margin-top: -1px !important; }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); if ( sss.sheetRegistered(uri, sss.AGENT_SHEET) ) sss.unregisterSheet(uri, sss.AGENT_SHEET); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
Но я не как не могу добавить индикатор под названием вкладки и z-index: не помогает. Помогите пожалуйста
Я тут нашёл в одном расширении файл tabprogressbar.xml добавляющий индикатор:
<?xml version="1.0"?> -<bindings xmlns:xbl="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns="http://www.mozilla.org/xbl" id="tabprogressbarBindings">-<binding id="tab-label" extends="xul:hbox">-<content>-<xul:vbox flex="1" class="tab-label-inner-box"><xul:progressmeter class="tab-progress" xbl:inherits="value=tabprogressbar-progress" mode="normal"/><xul:label flex="1" class="tab-real-text" xbl:inherits="value,crop,accesskey"/></xul:vbox></content>-<implementation>-<constructor> <![CDATA[ var node = this.parentNode; while (node.localName != 'tab') node = node.parentNode; node.addEventListener('DOMAttrModified', this.eventHandler, false); ]]> </constructor>-<destructor> <![CDATA[ var node = this.parentNode; while (node.localName != 'tab') node = node.parentNode; node.removeEventListener('DOMAttrModified', this.eventHandler, false); ]]> </destructor>-<field name="eventHandler"> <![CDATA[ ({ mOwner : this, handleEvent : function(aEvent) { if (aEvent.attrName != 'label') return; this.mOwner.setAttribute('value', aEvent.target.getAttribute('label')); } }) ]]> </field></implementation></binding></bindings>
Как перевести этот код только в javascript без xml
Отсутствует
Тогда эти переменные стали бы глобальными, что нежелательно?
Переменные, объявленные через var, видны только из кнопки.
А почему не получается вызвать функцию restoreTarget по событию онклик?
http://javascript.ru/basic/functions#oblasti-vidimosti
Добавлено 07-04-2014 16:16:22
Как перевести этот код только в javascript без xml
Добавить стиль вида
.tab-label { -moz-binding: url("data:application/xml,<тут закодировать данные через encodeURIComponent()>#tab-label"); }
Отредактировано Infocatcher (07-04-2014 16:16:22)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Добавить стиль вида
Выделить кодКод:
.tab-label { -moz-binding: url("data:application/xml,<тут закодировать данные через encodeURIComponent()>#tab-label"); }
Спасибо, так добавляется но оказалось всё не так просто тот файл tabprogressbar.xml работает только с своим расширением. Буду думать как переделать его
Отсутствует
Может кому надо;
// Показывать индикатор загрузки на вкладках которые загружаются, от 08.04.2014. ................................ (function () { // Css стиль для индикатора загрузки вкладок .... var uri = makeURI('data:text/css,'+ encodeURIComponent('\ /* binding для добавления индикатора под "xul:label" каждой вкладки */\ tabs.tabbrowser-tabs label.tab-text {\ -moz-binding: url("data:application/xml,%3Cbindings%20id%3D%22tabprogressbarBindings%22%0A%09xmlns%3D%22http%3A%2F%2Fwww.mozilla.org%2Fxbl%22%0A%09xmlns%3Axul%3D%22http%3A%2F%2Fwww.mozilla.org%2Fkeymaster%2Fgatekeeper%2Fthere.is.only.xul%22%0A%09xmlns%3Axbl%3D%22http%3A%2F%2Fwww.mozilla.org%2Fxbl%22%3E%0A%3Cbinding%20id%3D%22tab-label%22%20extends%3D%22xul%3Ahbox%22%3E%0A%09%3Ccontent%3E%0A%09%09%3Cxul%3Avbox%20class%3D%22tab-label-inner-box%22%20flex%3D%221%22%3E%0A%09%09%09%3Cxul%3Astack%20xbl%3Ainherits%3D%22flex%22%20flex%3D%221%22%3E%0A%09%09%09%09%3Cxul%3Ahbox%20class%3D%22label-behind-box%22%20flex%3D%221%22%2F%3E%0A%09%09%09%09%3Cxul%3Avbox%20class%3D%22tab-progress-box%22%20flex%3D%221%22%3E%0A%09%09%09%09%09%3Cxul%3Aprogressmeter%0A%09%09%09%09%09%09class%3D%22tab-progress%22%0A%09%09%09%09%09%09mode%3D%22normal%22%0A%09%09%09%09%09%09xbl%3Ainherits%3D%22value%3Dtab-progress%22%2F%3E%0A%09%09%09%09%3C%2Fxul%3Avbox%3E%0A%09%09%09%09%3Cxul%3Ahbox%0A%09%09%09%09%09flex%3D%221%22%0A%09%09%09%09%09align%3D%22center%22%3E%0A%09%09%09%09%09%3Cxul%3Alabel%0A%09%09%09%09%09%09class%3D%22tab-real-text%22%0A%09%09%09%09%09%09flex%3D%221%22%0A%09%09%09%09%09%09xbl%3Ainherits%3D%22value%2Ccrop%2Caccesskey%22%2F%3E%0A%09%09%09%09%3C%2Fxul%3Ahbox%3E%0A%09%09%09%3C%2Fxul%3Astack%3E%0A%09%09%3C%2Fxul%3Avbox%3E%0A%09%3C%2Fcontent%3E%0A%3C%2Fbinding%3E%0A%3C%2Fbindings%3E#tab-label");\ }\ /* цвет, тень и фоновое изображение в base64 */\ .tab-progress > .progress-remainder {\ background-color: #5d9856 !important;\ }\ .tab-progress > .progress-bar {\ box-shadow: 0 0 2px #7ffa52;\ background: #4fca32 url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAADCAYAAABPsHHBAAADDElEQVRYhe3Y+U/TdxzHcf+GKYNSoBQoUMtValtpgdZCa60wKFBtAQFndkSzw+ye12Z2GjXOEGOMMcb4zwxK+dJSncect5tzbut9P/cD137QRDRbRb8/PH5/fd755HO8VvVMNPPC+rGZngl1/nOI/jevTahFz4Wmp9L9CPlfy0ryuNnmO9dK8vR7N//Z82Hh/NXQM6Ghd1JD7+S6Rc5JLU6vFqdXh9Oro8+ro8+rp8+rp39KT//U+kUDUy3zDAz4DLh8Blw+Iy6fkS0+I1umWxdtnW5bIrTjFtpxCybcggmPYMIjmPEIZgZnzAzObJhnYXDGwpDfwpC/gyF/B8P/si3QOc/KtoCVkYCVkYBtzqyN0dmNi8Zm7YwG54wFN81zMBZ0sP2CA/l4GasWLqWuySa6vE04vI04phqx+xqw+xqwTddhE+qxCnV0ztTR4Vdh8avYEFiLeVaJKaikPVhL24VaWi/WYLxYg+GnalouVbP+sgL9ZQW6K1Vor1ax7molmp8raL5WgfqanKZf5DReL6fhejn1N2TU3ZShulXG2ltlKG+XUnunhJo7JVTflaK4J6XqXjGVvxZT8ZsE+X0J5feLkP1eRNmDQkofFFLyx6tIHxZQ/LAAyZ9rKPprDYV/r54TEr0cXhGJRCLRf2o1klAB0lAhpSEJspAUebiUyrAMRVhOTbgSZViBKlxLfURJQ0SFOlJPc6QRbUSNLqKhJarFENXTGm2hPWrEHG3DEjPRGbNgi3Vgj1lxxDbSFdtEd3wzvfFu+uK9DMSduOL9uOMuPImtDCc8jCSGGU2MsD0xyo7k67yR3MFbyTfZmXybXcmdvJPcxXupd9mdep8PUrv5KPUhn6Q+5rPUp+xJf86+9F4OpPfzZfoLDqYP8nXmK77NfMP3me84lDnEkcxhjmaO8kP2GMezxxnPjnMie4KT2ZOcyp7idO40Z3JnOJs7y7ncOc7nzi89sESiF0H+f3KiJWKD9XzNPd+5VhKxwVqehTP42RqsgWdosNzLaLCGlt1gWR/RYNmfqMH6B9+z4Mt4YIdNAAAAAElFTkSuQmCC") no-repeat right;\ }\ /* где показывать, размеры */\ label.tab-text:not([tab-progress]) .tab-progress {\ visibility: collapse;\ }\ .tab-progress,\ .tab-real-text,\ label.tab-text > .tab-label-inner-box,\ label.tab-text > .tab-label-inner-box > *,\ label.tab-text > .tab-label-inner-box > stack > *,\ label.tab-text > .tab-label-inner-box > stack > * > spacer {\ margin: 0 !important;\ padding: 0 !important;\ text-indent: 0 !important;\ }\ .tab-progress {\ min-width: 0 !important;\ height: 2px !important;\ min-height: 3px !important;\ max-height: 3px !important;\ -moz-appearance: none !important;\ border: none !important;\ outline: none !important;\ margin: -3px 0 0 !important;\ position: relative !important;\ }\ .tab-progress > .progress-bar,\ .tab-progress > .progress-remainder {\ -moz-appearance: none !important;\ }\ .tab-progress { margin: 0 0 -4px !important; }\ .tab-progress-box { -moz-box-pack: end !important; }\ \ /* удалить стандартный индикатор загрузки( throbber ) */\ .tab-throbber:not([pinned="true"]) { display: none !important; }\ .tab-icon-image:not([pinned="true"]) { display: block !important; }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); addDestructor(function() sss.unregisterSheet(uri, sss.AGENT_SHEET) ); // Отслеживать прогресс загрузки всех вкладок .... var tabsProgressListener = { onProgressChange: function( browser, webProgr, request, curSelfProgr, maxSelfProgr, curProgr, maxProgr ) { if ( !maxProgr ) return; // добавлять атрибут с прогресом загрузки к 'xul:label' каждой вкладки var percentage = parseInt( (curProgr * 100) / maxProgr ); var tab = gBrowser._getTabForBrowser( browser ); var label = document.getAnonymousElementByAttribute( tab, 'class', 'tab-content').querySelector(".tab-text.tab-label"); percentage > 0 && percentage < 97 ? label.setAttribute('tab-progress', percentage ) : label.removeAttribute('tab-progress'); } }; gBrowser.addTabsProgressListener( tabsProgressListener ); addDestructor(function() gBrowser.removeTabsProgressListener( tabsProgressListener ) ); })();
Отсутствует
Может кому надо
прикольно, в коллекцию
Отсутствует
По-прежнему у меня капризничает кнопка Открывать всё в новых вкладках, от 07.12.2013
Время от времени - закономерности я не обнаружил - перестают открываться по левому клику закладки из меню "Закладки" и с панели закладок. Не реагируют совсем на левый клик.
В консоли в это время ошибка
NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMWindow.content]
Ругается на строку eval("openLinkIn = " + linkIn) в этом куске кода
// удалять изменения из внутренних функций Firefox .... addDestructor(function() { eval("whereToOpenLink = " + where); eval("PlacesUIUtils._openNodeIn = " + openNode); eval("openLinkIn = " + linkIn); eval("gURLBar.handleCommand = " + handle);
Помогает перезапуск кнопки.
Отсутствует
rbfyec
Возможно глюк появляется при открытии новых окон, попробую сегодня подправить.
Ругается на строку eval("openLinkIn = " + linkIn) в этом куске кода
Консоль врёт с этим кодом, ошибка не там. Проверено.
Отредактировано bunda1 (09-04-2014 13:20:27)
Отсутствует
Всем доброго времени суток!
Я новичок во всем этом. Подскажите пожалуйста, почему не удается создать блок и вставить его в конец тега "body" используя этот код?
var placeDiv = document.getElementsByTagName('body')[0]; var newDiv = document.createElement('div'); placeDiv.appendChild(newDiv);
Из консоли фаербага запускается на "ура", а вот при нажатии на кнопку ничего не происходит
Отсутствует
var placeDiv = content.document.getElementsByTagName('body')[0]; ??
Большое спасибо!
Отсутствует
Если я знаю id папки с закладками, как определить ее название?
Отсутствует
var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId )
Спасибо bunda1!
А как мне вот это сделать - скрипт должен открывать локальный файл, а адрес файла lalala-2014-04-11.txt. И соответственно каждый день цифры меняются.
Как указать скрипту на этот файл независимо от даты?
Отсутствует
А как мне вот это сделать - скрипт должен открывать локальный файл
Как указать скрипту на этот файл независимо от даты?
никак?
Никак.
Отсутствует
Выделить кодКод:
var localFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);localFile.initWithPath("C:\\путь\\к\\файлу");localFile.launch();
Это я знаю, сам неоднократно пользовался. Загвоздка в том, что каждый день меняется имя файла, а значит и вся строка "C:\\путь\\к\\файлу"
Как указать скрипту на этот файл независимо от даты?никак?
Никак.
Я пока что воспользовался сниппетом Получение даты и составил имя файла по частям
Но приветствуются и другие варианты
Отредактировано hartumov (12-04-2014 13:57:34)
Отсутствует
Как в эту строку записать нужную кодировку (utf-8) и обязательны ли остальные параметры?
Отсутствует
Как в эту строку записать нужную кодировку (utf-8) и обязательны ли остальные параметры?
Видимо, "utf-8" или "utf8".
Все параметры, кроме первого, скорее всего, не обязательны, но это зависит от реализации:
view-source:chrome://browser/content/tabbrowser.xml
<method name="addTab"> <parameter name="aURI"/> <parameter name="aReferrerURI"/> <parameter name="aCharset"/> <parameter name="aPostData"/> <parameter name="aOwner"/> <parameter name="aAllowThirdPartyFixup"/> <body> <![CDATA[ const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var aFromExternal; var aRelatedToCurrent; var aSkipAnimation; var aDisableMCB; if (arguments.length == 2 && typeof arguments[1] == "object" && !(arguments[1] instanceof Ci.nsIURI)) { let params = arguments[1]; aReferrerURI = params.referrerURI; aCharset = params.charset; aPostData = params.postData; aOwner = params.ownerTab; aAllowThirdPartyFixup = params.allowThirdPartyFixup; aFromExternal = params.fromExternal; aRelatedToCurrent = params.relatedToCurrent; aSkipAnimation = params.skipAnimation; aDisableMCB = params.disableMCB; } ...
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А почему если я запускаю код
открывается пустая вкладка ?
А если
gBrowser.addTab('https://forum.mozilla-russia.org/', null, 'windows-1251', null, false)
то нужная страница открывается, но кодировка не та, что я написал в скрипте, а та, что установлена в меню "Вид" - т. е. utf-8
Отредактировано Ferguss114 (13-04-2014 02:24:33)
Отсутствует
открывается пустая вкладка ?
Второй аргумент – nsIURI или null/undefined (или объект, если использовать новый формат вызова с двумя аргументами).
Ошибка: Could not convert JavaScript argument arg 2 [nsIWebNavigation.loadURI] = NS_ERROR_XPC_BAD_CONVERT_JS
Источник: chrome://global/content/bindings/browser.xml
Строка: 148
то нужная страница открывается, но кодировка не та, что я написал в скрипте, а та, что установлена в меню "Вид" - т. е. utf-8
Видимо, не работает. Или там какая-то другая логика.
Там потом вызывается
И потом уже сам loadURIWithFlags() (view-source:chrome://global/content/bindings/browser.xml):
<method name="loadURIWithFlags"> <parameter name="aURI"/> <parameter name="aFlags"/> <parameter name="aReferrerURI"/> <parameter name="aCharset"/> <parameter name="aPostData"/> <body> <![CDATA[ if (!aURI) aURI = "about:blank"; if (aCharset) { try { this.docShell.parentCharset = aCharset; } catch (e) { } } if (!(aFlags & this.webNavigation.LOAD_FLAGS_FROM_EXTERNAL)) this.userTypedClear++; try { this.webNavigation.loadURI(aURI, aFlags, aReferrerURI, aPostData, null); } finally { if (this.userTypedClear) this.userTypedClear--; } ]]> </body> </method>
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А как же все-таки открыть скриптом вкладку с нужной кодировкой?
Отсутствует
А как же все-таки открыть скриптом вкладку с нужной кодировкой?
Можно вот так попробовать:
var tab = gBrowser.addTab("https://forum.mozilla-russia.org/"); tab.linkedBrowser.docShell.charset = "windows-1251";
, по аналогии с меню кодировок:
function BrowserSetForcedCharacterSet(aCharset) { if (aCharset) { gBrowser.docShell.gatherCharsetMenuTelemetry(); gBrowser.docShell.charset = aCharset; // Save the forced character-set if (!PrivateBrowsingUtils.isWindowPrivate(window)) PlacesUtils.setCharsetForURI(getWebNavigation().currentURI, aCharset); } BrowserCharsetReload(); }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Большое спасибо Infocatcher!
Отсутствует