okkamas_knife Link Master только в 3.6 работает? , а то у меня никакого меню не появляется
Отредактировано Крошка Ру (05-12-2011 20:44:30)
Отсутствует
а ты по ссылке кликаешь?
okkamas_knife Да
Не только
mserv а у меня не хочет
Отсутствует
Anton
хорошо что ты вернулся
У меня на FF 8.0.1. +CB 0.0.5.5 обнаружился странный баг, пример:
Консоль ошибок показывает ошибку в CB кнопке,
Ошибка: syntax error Источник: chrome://custombuttons/content/button.js?windowId=Firefox&id=custombuttons-button6@init Строка: 2
но у меня нет такой кнопки id=custombuttons-button6 - проверено с Attributes Inspector
нажал на эту ошибку в Консоли и открывается совсем другая кнопка id=custombuttons-button17 и в совсем другой строке. Так происходит постоянно и очень мешает я думаю что это из за клонирования кнопок. CB или FF не различает клонирование кнопки.
Добавлено 05-12-2011 21:38:44
Крошка Ру
Link Master у меня на FF8 прекрасно работает.
Отредактировано bunda1 (05-12-2011 21:42:54)
Отсутствует
Отсутствует
Попытался сделать кнопку вызова менеджера профилей и созданный в менеджере профиль "Debug"
/*Initialization Code*/ var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:cb="http://xsms.nm.ru/custombuttons/" onclick="gQuot(event, this);"> <menuitem class="menuitem-iconic" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAFI0lEQVRIiZWUSWxVVRjHf+fe+17fex1obSulAx1QRIygiBNOhAVxhBiIGgeicYMLN7pQFy6MK43iAhNNFI3GGE3UBbpQowZNVNQqDrUCFqSlw3v19fUNdz73nOOiUitSDCe5ycnJPf/f933/7zti3bp1/M9yhBDXCyG2CiFWCyHSxphJrfWnUso3Hccpnu6y+B9ARgixJ4qiOz3Pw7Ztent76e7uJpvNMjU1NTk2NvYY8LoQ4pQC9rJlyxanC7EzDMNHisUilUoFpRQ118W2Hdra2ujvH2gUwrp1ZqaYEUJ8esr0Txe+MWarUopcLseVV26gt6+P4V+HKOQLxLGkobGBdMpBabEjjKI9QoiRMwE0Ax2ZTIYlzS30dHdx6UCOuzdeTxgr8sUKWmua6uvcwV9bt5Uq3ohtW2eUgQa0AWpuQPnPMW65fxtNDTm00gghkErhemHDBQNLmxcTOR2gqrQ+tqQhu+amq1bR39WKMJrA9zHGACATTRzFhGG4Uhvz4ZkCkIl+/8IVS7fcdcNaspk6tJIYLBACDGAUaAk6aedv6H8Ai5wDYAx7tVIPV6vuKrQml0ljcLAs5vSUQieSRMbSLAbI1P2ThDaQJHP7RFsIYabzM7VXa67/VMoW2EIjSOHYFtoYZJwQxRFRHA0bbeDvURBCkKtLzQGGh38DwI1g+8Ww6x4IbcNHh9s4UBggm218vuJ6W+tSYoNAYXQax7YxQBRLgiAcj6N4v9YKYadwbIdERnzx7SGU1jiVam1BvaBzGSDggU6XUpjigL/VV9Ifnq24G7RSSClJOzbGgB/G1AL1gu3Y4+decjVLRndz8MefuOcl+O1oATAnmawBCViAgkw82dbeYp6cLDXcO1UYJ46bqc/W4TgWRhuEnXrxHLP36caeTWR7BmCyhO3lOXh0gQf/cUUAijTp1odyfZseWJOrLe8aWM/YRA+zE78QhJpsLkdjGt3Sv2ZVu3vgXWG508TVFxDODydb7ZxCvAmrZw89920nczaYmNbkMC3rb6a29lq80a8w0qPhrC6rcfWWjWJoBGqz8MdndxNUHsTi5YWS/5ptowC9dDdn37GdYgEOfQJHvoE/A6z9z7KkHtqu2snumS08c/w6ZCoHnoeZncUMvpfhyPGXshY7m3OLAG7ss3ZSv3lHMF0imBrHryYExTLB6Aj+sTzqkyeouhFf59OMlhOEBjl6GH94EHdokNpIjX7Dczsu5ooTmvaJzRVL6Xx8y0WvyHRPczA9QRxqYj8mjhSRGxLMVHAPDdKx8ny6V1xOd9qwttOn+N4uvLFjBK4kDCFycQZa6Hvnd94OJGreg20rnNusVFffzNgkJgoBg9GKpFoiKU2g3CqEhvrP3uLz+vXsG5bcWH+EmaEhZMz8kGGgvYlNN/Sw+Y1DfOAA5AS585uat03nI8IwwBiNDgPC6ePIcgm0BgssA79/+DHft37Nd5Xz+HLPazRPQjRfh7mVk1hWxPL5LlrfSEe7tFeWCjUSrUh8n2DyGInrLSjiXJBxxSNT3k9bGtx9e9FAsqAlmxz4ocrHnxd4Z94DTxFYNS/pqJYvU77MVCbyeCWPMIEo+vcnQ0jZOl4T/yI7S0ccX4KJwZZQjjj6bY1dT43z6PGI4omgTnSTvijF6mvquL3XYVNWsKpB0ASkzT8/amPQlsCPIZnRTNswMqr5+WDClz+H7C9oSiePFicfWJDpsjir32K5DR0G0mLOv1BDWUE5r6n+oSlZ4CeQLPbq/wUSK5/v5r+ohwAAAABJRU5ErkJggg==" label="Профиль Debug" onclick={"document.getElementById('" + this.id + "').Fire1(event)"}/> <menuitem class="menuitem-iconic" image="data:image/bmp;base64,Qk22AgAABQFyYTYAAAAoAAAADQAAABAAAAABABgAAAAAAIACAADCHgAAwh4AAAAAAAAAAAAAzdLVzdLVtLW0rJmLtJ2DxaWTxa2Txa2TxamTvKWTrKmkxcrNzdLV/83S1bSdg+a5i/7mvP7yzf721f723f721f7yzf7mxfbSpMWdery9xf/N0tXdqXL2zpv21qT+4rT+6rz+7sX+6rz+4rT+2qT20pv2wovFtaz/zdLV1aFq9sKL9s6T9tak/t6s/uKs/t6s/tqk9s6b9saL7rFyxcK8/83S1c2lg+65evbCi/bKk/bSm/bSm/bSm/bKk/bGi+65etWhcs3S1f/N0tXFvbTmoWLuvYP2xov2xpP2xpP2xpP2xovuvYPusWrNqZPN0tX/zdLVzdLVzZVq7r2D9s6k9s6k9tKk9s6k9s6k9sab1ZlZzcrNzdLV/83S1c3S1c3GxdWRUfbStPbOrPbKpPbKpPbWvOapcsWxpM3S1c3S1f/N0tXN0tXN0tW8nYPmrXL+6s3++ub+8tX2ypu0iWLNztXN0tXN0tX/zdLVzdLVxcbF1aFq/tqs/ua8/uq8/ua8/t6s7r2DrJ2TzdLVzdLV/83S1c3S1cWhg+65evbKk/bWm/7apPbWpPbKk+69g7yNYs3S1c3S1f/N0tXN0tXNmWrurWruuXr2wov2xov2wovuvYPurWrNjVHFys3N0tX/zdLVzdLVzZVq7qlq7r2L9sKL9sKT9sKT7r2L7rF6zYVJzc7VzdLV/83S1c3S1cWpk+axevbKpPbOpPbOrPbOrPbKpO7Cm7yNYs3S1c3S1f/N0tXN0tXN0tXNmWr23sX24s324s324s324s3VoXLFwrzN0tXN0tX/zdLVzdLVzdLVzc7NzaGD3bGT7sqs5rmbzaGDzcK8zdLVzdLVzdLV/w==" label="Менеджер профилей" onclick={"document.getElementById('" + this.id + "').Fire2(event)"}/> </menupopup>; var bool = XML.prettyPrinting; XML.prettyPrinting = false; var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement; XML.prettyPrinting = bool; this.appendChild(el); this.type = "menu"; this.orient = "horizontal"; this.menuClick = function(event) { event.preventDefault(); event.stopPropagation(); this.open = false; } this.setAttribute("onclick", "this.buttonClick(event)"); //Профиль Debug this.Fire1 = function(event) { var path1="C:\\Program Files\\Mozilla Firefox\\firefox.exe"; startProcess(path1,["-no-remote","-P","Debug"]); function startProcess(path, args){ var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if(file.exists()){ var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length);} }; } //Менеджер профилей this.Fire2 = function(event) { var path1="C:\\Program Files\\Mozilla Firefox\\firefox.exe"; startProcess(path1,["-no-remote","-P"]); function startProcess(path, args){ var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if(file.exists()){ var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length);} }; }
Подскажите пожалуйста:
1. Можно ли как то убрать путь к firefox.exe?
2. Можно ли как то чтобы название созданного профиля в кнопке бралось из настроек?
Отсутствует
а можно Extension List исправить для , а то у меня ошибку выдаёт
По идее, должна помочь замена
на
dialog = "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(dialog. toXMLString ());
Добавлено 06-12-2011 00:01:24
Консоль ошибок показывает ошибку в CB кнопке
...
но у меня нет такой кнопки id=custombuttons-button6
Должно быть исправлено в версии 0.0.5.6pre3-20111120.
Отредактировано Infocatcher (06-12-2011 00:01:24)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
По идее, должна помочь замена
Должно быть исправлено в версии 0.0.5.6pre3-20111120.
спасибо за информацию, и замена тоже помогла.
я исправыл Extension List
Отсутствует
Infocatcher Спасибо
bunda1 Спасибо
..... а разве он раньше не копировал список в html - файл ?
Отсутствует
Автовыделение(Firefox 3.6+)
http://forum.mozilla-russia.org/viewtop … 96#p527196
Добавил новые возможности:
Теперь, если открыт панель поиска по странице, кнопка будет автовыделять текст из поле вода панели поиска по странице, если в тексте два или больше букв, это можно изменить в about:config Auto.Highlight.Num
Отсутствует
Дополнение не работает, рабочего скрипта не нашел. Может хоть кнопка будет ...
Было (и есть) дополнение bugmenot 2.2. Щёлкаешь ПКМ на поле логина, он его выдирает с сайта bugmenot и пишет сам с логином и паролем.
Отказывается сейчас почему-то оно у меня работать. На всех сайтах пишет "логины не найдены". Даже на чистом профиле, на сайте, на котором всё раньше работало. И на 3.6.24 тоже.
Исходный код дополнения хоть и есть, но в javascript не силён.
Может кто помочь? Расширение допилить, как вариант. Или кнопкой сможет повторить всю функциональность.
Спасибо
Отсутствует
Дополнение не работает, рабочего скрипта не нашел. Может хоть кнопка будет ...
Ищите проблему у себя. Пользуюсь Bugmenot 2.2 регулярно и никаких проблем нет!
Как аналог, могу посоветовать скрипт BugMeNot auto-getter and filler
Отсутствует
Inko7
Да я вроде все варианты перебрал. На чистом даже не работает.
Конечно windows ради неработающего расширения приложения не буду переустанавливать.
А на скрипт посмотрю, спасибо.
Сразу возник вопрос: как по хоткею скрипт заставить работать? До этого избегал greasemonkey и вместо скриптов искал альтернативу в виде расширений.
Можно скрипт в кнопку превратить? Скопировав код в "Код" новой кнопки ничего не заработало
Отредактировано SendInfo (12-12-2011 15:45:53)
Отсутствует
SendInfo
Вот CB код каторый заменяет greasemonkey.
Скрипты сохраняй в папку \Profile\chrome\UserScriptLoader, скрипт в папке должен быть вот таким 47007.user
Код саздает на панеле дополнений кнопку которая открывает меню для управление скриптами:
//User Script Loader....................... (function() { const OPEN_FOLDER_MENU = false; const SAVE_SCRIPT_MENU = true; const USE_STORAGE_NAME = ['cache', 'cacheInfo']; // ????? pref ? storage ????? // User setting (pref.js ?????????????) const EDITOR = 'C:\\Program Files\\EmEditor\\EmEditor.exe'; //\>\\ const SCRIPTS_FOLDER = ''; // ???? chrome\\UserScriptLoader ???? // ?: 'D:\\UserScriptLoader' const ON_IMAGE = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACOElEQVQ4ja3Q3UtTcRgH8N8f" + "4K11FaRrVGumlTXndPYiyQqkCyPoLroOCbyJSCGJUhOGUSnShVqtFpYlW/lCKiPmy5zinObZ" + "dJtn29nZcW7nnB39TapvF+WdI4W+95/n+zwPIf8zwnRFt+AyIj5VDn7CAN5ZiphDD25Mh+jI" + "aUSGixEePAnWXhTaeYCr/OdWogMZoR2Z2DPQyBNsrpqxEWiF4muG4LwK9nOhvCOOT5Y1iks3" + "sSV0IP29CrLnAkS3EalxPRR/CxJTN8Dai35kXZ+fNGQyfBs2Q7chz1dCcp9FasIAxd+E5Gwt" + "woNl8H3QqnZuHy+tSc5fRybejvTCRUiz55CaKoPsvQV5sR7ciAnBvoJLWdtjTn1aCTWARlsh" + "z52HOG1E0lkCxd+C+LdrCH7S1mXHjhLd2nQ1MvxzyF4TxJlKpCYrsD6mQ3rpEUL92l+BPg1d" + "6T1Kl98dpr43asq8OkSZ7nyeEEII59DzElMHGm3DJmvGRvAxFH8TFF8T0osPIXkaIc7UI+W6" + "i+TEHbD9VWC68hRPx4E//+BGz6QiX4tpeOgUZQdO0FV7IQ3ZCqi8+ACC7TjWhkwQ3Q2IfrmC" + "ZcsxMF0HX2Q9ZzuBj9rRdVctpLn7EN33ELaZwPSoRE/nvv3/xIQQEnivgeRpBDdcg5W3BWB6" + "8s27gn/xDDdUjejAZfheqxOezrzdtRJCiNeamxPo1WLFqgHzUtW8a7idZesRr9+i5r1Pc3P2" + "jAkhhLGodXs1vwEkf3FKAtNVEwAAAABJRU5ErkJggg=="; const OFF_IMAGE = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrElEQVQ4ja2QXUhTARzFb3f5" + "5kuB2EOBplLJTCtrzs/pJNHEJ03orXyIHkQkFSvSSKTmB5hRKfWSVJZhWX5MvZIuiemc05zT" + "3Obm3Ny8m7rP6+7MdnoIQWF76zwe+J3z/x+C+J+yTWd02OTpsE6lgZ5MAS1Nxvo4HxYJD+bR" + "i1gbSYRp+DyMAwmGwAHytD87m+3w2drgW38Odu0pvKst2NY3g9E0wCYtglEc7w4IW2Wpdc6l" + "EuzY2uH5lQO3UginIh2OCT4YbSM2p67DOJCwG/R8Wpbi89Gt8BrK4Z7PhkshgGMyBYxWBPts" + "GUzDqdB85kYFbp9ILrTPX4PP2gbPwmW4ZjPhmEqFW1UK92INLKO5WOmJywvavi7lexhDLVhz" + "M9xzWXBOp8MuTQKjbYT1RzFWvnIrgsPjSbyN6QL46Bdwq3LhnMmGQ5aBLQkPnqXHMPRy/fqe" + "WFbXfYZd/niK1byPYdVvo1l1x0maIAiCsIzzaZe6Aqy5FV5jC7ZXmsBoRWA0IngWH8GlrINz" + "pgYO+T3YJ+/A2JsD9etIRtl+4t8elrFLjrVviayJusAah86xqwPxrKE/jnUv1sPWfxYbVC6c" + "ilosNCThe/FRUJmHMZhNroqzyeqgb+m/cMe25GVwzT2EU3EfKlEift7mwdvXBP+CGExnOWS3" + "uLtDWWRp4IBPsXAp62AZKYTuQxyovBDHdl8T8CQfqDoC1EfAJsrAoJDUBYJnLFQBzENXoHkX" + "s6l8GRlOCTh+/3Q39steEw5KwPEfgFVdYaH6bi50XbFQv4lq2PPFQtLoeXUDqAkHW0lgq5KA" + "4SYHYiFpOhCw3HVape2MoVXPwkL3+5Krxx5MlET/NldFwFodguWSQ6DyObsDQvLugQB1Zwwv" + "2LCSouPVYiGppwQcv1hIGvfgv6X5zFaYeSAgAAAAAElFTkSuQmCC"; var useDocumentStart = (function(){ var version = Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo).version; var vc = Cc["@mozilla.org/xpcom/version-comparator;1"].getService(Ci.nsIVersionComparator); return vc.compare(version, '3.6.12') >= 0; })(); var observer = !useDocumentStart? null :(function(){ let list = Cc['@mozilla.org/appshell/window-mediator;1'] .getService(Ci.nsIWindowMediator) .getEnumerator('navigator:browser'); while(list.hasMoreElements()) { let win = list.getNext(); if (win.UserScriptLoader && win.UserScriptLoader.observer) { return win.UserScriptLoader.observer; } } return { disabled: true, observerService: Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService), observe: function(subject, topic, data){ var doc = subject.document; var evt = doc.createEvent("Events"); evt.initEvent("USL_DocumentStart", true, false); doc.dispatchEvent(evt); }, register: function(){ this.observerService.addObserver(this, "content-document-global-created", false); this.disabled = false; this.log('USL observer start'); }, unregister: function(){ this.observerService.removeObserver(this, "content-document-global-created"); this.disabled = true; this.log('USL observer end'); }, log: log }; })(); if (typeof window.UserScriptLoader != 'undefined') { window.UserScriptLoader.theEnd(); } var ns = window.UserScriptLoader = { OPEN_FOLDER_MENU : OPEN_FOLDER_MENU, SAVE_SCRIPT_MENU : SAVE_SCRIPT_MENU, HIDE_EXCLUDE : false, DEBUG : false, USE_STORAGE_NAME : USE_STORAGE_NAME, SCRIPTS_FOLDER : SCRIPTS_FOLDER, ON_IMAGE : ON_IMAGE, OFF_IMAGE : OFF_IMAGE, EDITOR : EDITOR, AUTO_REBUILD : false, useDocumentStart : useDocumentStart, readScripts : [], runAtStartScripts: [], runAtEndScripts : [], disabled_scripts : [], _disabled : null, observer : observer, get disabled () this._disabled, set disabled (bool) { this._disabled = bool; if (bool) { //$('sidebar').removeEventListener('DOMContentLoaded', this.sidebarContentLoaded, false); gBrowser.mPanelContainer.removeEventListener('DOMContentLoaded', this.domContentLoaded, false); gBrowser.mPanelContainer.removeEventListener('USL_DocumentStart', this.onDocumentStart, false); this.icon.style.textDecoration = 'line-through'; this.icon.setAttribute('src', this.OFF_IMAGE); } else { //$('sidebar').addEventListener('DOMContentLoaded', this.sidebarContentLoaded, false); gBrowser.mPanelContainer.addEventListener('DOMContentLoaded', this.domContentLoaded, false); gBrowser.mPanelContainer.addEventListener('USL_DocumentStart', this.onDocumentStart, false); this.icon.style.textDecoration = 'none'; this.icon.setAttribute('src', this.ON_IMAGE); } return bool; }, fxver: parseFloat(Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo).version), getFocusedWindow: function(){ var win = document.commandDispatcher.focusedWindow; if (!win || win == window) win = content; return win; }, init: function() { // ???????????????? ["require", "resourceText", "resourceURL"].forEach(function(name){ var s = window.globalStorage['UserScriptLoader.' + name]; for (var n in s) { s.removeItem(n) } }); this.pref = new PrefManager(); try { let ds = this.pref.getValue('script.disabled', ''); if (ds) ns.disabled_scripts = ds.split('|'); ns._disabled = this.pref.getValue('disabled', ns._disabled); ns.SCRIPTS_FOLDER = this.pref.getValue('SCRIPTS_FOLDER', ns.SCRIPTS_FOLDER); ns.EDITOR = this.pref.getValue('EDITOR', ns.EDITOR); ns.HIDE_EXCLUDE = this.pref.getValue('HIDE_EXCLUDE', false); ns.DEBUG = this.pref.getValue('DEBUG', ns.DEBUG); } catch(ex) { log(ex) } ns.icon = $('status-bar').appendChild($E( <statusbarpanel id="UserScriptLoader-icon" class="statusbarpanel-iconic" context="UserScriptLoader-popup" onclick="UserScriptLoader.iconClick(event);" style="text-decoration: none;"/> )); ns.popup = $('mainPopupSet').appendChild($E( <menupopup id="UserScriptLoader-popup" onpopupshowing="UserScriptLoader.onPopupShowing(event);" onpopuphidden="UserScriptLoader.onPopupHidden(event);" onclick="UserScriptLoader.menuClick(event);"> <menuseparator id="UserScriptLoader-menuseparator"/> <menu label="User Script Command" id="UserScriptLoader-register-menu" accesskey="C"> <menupopup id="UserScriptLoader-register-popup"/> </menu> <menuitem label="Save Script" id="UserScriptLoader-saveMenu" accesskey="S" oncommand="UserScriptLoader.saveScript();" collapsed={!ns.SAVE_SCRIPT_MENU}/> <menu label="Menu" id="UserScriptLoader-submenu"> <menupopup id="UserScriptLoader-submenu-popup"> <menuitem label="delete resource / require" oncommand="UserScriptLoader.deleteStorage('resource');"/> <menuitem label="delete pref storage" oncommand="UserScriptLoader.deleteStorage('pref');"/> <menuseparator/> <menuitem label="Hide exclude script" id="UserScriptLoader-hide-exclude" accesskey="N" type="checkbox" checked={ns.HIDE_EXCLUDE} oncommand="UserScriptLoader.HIDE_EXCLUDE = !UserScriptLoader.HIDE_EXCLUDE;"/> <menuitem label="Open Scripts Folder" id="UserScriptLoader-openFolderMenu" accesskey="O" oncommand="UserScriptLoader.openFolder();" collapsed={!ns.OPEN_FOLDER_MENU}/> <menuitem label="Rebuild" accesskey="R" oncommand="UserScriptLoader.rebuild();"/> <menuitem label="Auto Rebuild" id="UserScriptLoader-auto-rebuild" accesskey="A" type="checkbox" checked={ns.AUTO_REBUILD} oncommand="UserScriptLoader.AUTO_REBUILD = !UserScriptLoader.AUTO_REBUILD;"/> </menupopup> </menu> </menupopup> )); ns.menuseparator = $('UserScriptLoader-menuseparator'); ns.registMenu = $('UserScriptLoader-register-menu'); ns.registPopup = $('UserScriptLoader-register-popup'); ns.openFolderMenu = $('UserScriptLoader-openFolderMenu'); ns.saveMenu = $('UserScriptLoader-saveMenu'); ns.hideExcludeMenu = $('UserScriptLoader-hide-exclude'); ns.autoRebuildMenu = $('UserScriptLoader-auto-rebuild'); ns.importScripts(); ns.disabled = ns._disabled; window.addEventListener('unload', ns.uninit, false); if (this.observer.disabled) this.observer.register(); }, uninit: function(event) { let disabledScripts = ns.readScripts.reduce(function(ret, script) { if (script._disabled) ret.push(script._leafName); return ret; }, []); var pref = ns.pref || new PrefManager(); pref.setValue('script.disabled', disabledScripts.join('|')); pref.setValue('disabled', ns._disabled); pref.setValue('HIDE_EXCLUDE', ns.HIDE_EXCLUDE); if (!ns.disabled) ns.disabled = true; if (event) { let list = Cc['@mozilla.org/appshell/window-mediator;1'] .getService(Ci.nsIWindowMediator) .getEnumerator('navigator:browser'); while(list.hasMoreElements()) { if (list.getNext() != window) return } ns.observer.unregister(); } }, theEnd: function() { ns.uninit(); ns.icon.parentNode.removeChild(ns.icon); ns.popup.parentNode.removeChild(ns.popup); //delete window.UserScriptLoader; }, importScripts: function() { let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile) if (!ns.SCRIPTS_FOLDER) { let UChrm = Cc["@mozilla.org/file/directory_service;1"] .getService(Ci.nsIProperties) .get("UChrm", Ci.nsIFile); ns.SCRIPTS_FOLDER = UChrm.path; aFolder.initWithPath(ns.SCRIPTS_FOLDER); aFolder.appendRelativePath('UserScriptLoader'); } else { aFolder.initWithPath(ns.SCRIPTS_FOLDER); } try { if( !aFolder.exists() || !aFolder.isDirectory() ) { aFolder.append(""); aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664); } } catch (e) { return error('importScripts error.') } ns.readScripts = []; ns.runAtStartScripts = []; ns.runAtEndScripts = []; let ext = /\.user\.js$/i; let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); if (ext.test(file.leafName)) ns.loadScript(file); } }, rebuild: function() { let disabledScripts = ns.readScripts.reduce(function(ret, script) { if (script._disabled) ret.push(script._leafName); return ret; }, []); ns.disabled_scripts = disabledScripts; ns.importScripts(); ns.DEBUG = this.pref.getValue('DEBUG', ns.DEBUG); }, openFolder: function() { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); file.initWithPath(ns.SCRIPTS_FOLDER); file.launch(); }, saveScript: function() { var win = ns.getFocusedWindow(); var url = win.location.href; var doc = win.document; var pre = doc.querySelector('body > pre'); var filename = pre && /@name\s+([^\n]+)/i.test(pre.textContent)? RegExp.$1 + '.user.js': /[^/]+$/i.exec(url)[0]; var lastDir = gPrefService.getCharPref('browser.download.lastDir'); gPrefService.setCharPref('browser.download.lastDir', ns.SCRIPTS_FOLDER); saveURL( url, filename, null, true, false, makeURI(url, doc.characterSet) ); gPrefService.setCharPref('browser.download.lastDir', lastDir); }, deleteStorage: function(type) { var storage = new StorageManager(type); var list = storage.listValues(); if (list.length == 0) return alert(type + ' is none.'); list.push('All ' + type); var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService); var selected = {}; var ok = prompts.select( window, "UserScriptLoader " + type, "Select delete URL.", list.length, list, selected ); if (!ok) return; if (selected.value == list.length -1) { list.pop(); list.forEach(function(url, i, a) { storage.deleteValue(url); }); return; } storage.deleteValue(list[selected.value]); }, loadScript: function(aFile) { var script = new ScriptEntry(aFile); script._disabled = ns.disabled_scripts.indexOf(script._leafName) >= 0; ns.readScripts.push(script); var runat = script['run-at']; if (runat === 'document-start') { ns.runAtStartScripts.push(script); } else { ns.runAtEndScripts.push(script); } return; }, onPopupShowing: function(event) { var win = ns.getFocusedWindow(); var popup = event.target; var data = GrieverWindowStore.get(win); switch(popup.id) { case 'UserScriptLoader-popup': var run = data.USL_run; ns.readScripts.forEach(function(script) { if (ns.HIDE_DISABLED_SCRIPT && script._disabled) return; if (ns.HIDE_EXCLUDE && !script._isURLMatching(win.location.href)) return; let m = document.createElement('menuitem'); m.setAttribute('label', script.name || script._leafName); m.setAttribute('checked', !script._disabled); m.setAttribute('type', 'checkbox'); m.setAttribute('oncommand', 'this.script._disabled = !this.script._disabled;'); m.script = script; if (run && run.indexOf(script) >= 0) m.style.fontWeight = 'bold'; ns.popup.insertBefore(m, ns.menuseparator); }, ns); ns.saveMenu.hidden = win.location.href.indexOf('.js') == -1; ns.registMenu.hidden = data.USL_registerCommands && data.USL_registerCommands.length == 0; break; case 'UserScriptLoader-register-popup': var registers = data.USL_registerCommands; if (!registers) return; registers.forEach(function(item, i, a) { let m = document.createElement('menuitem'); m.setAttribute('label', item.label); m.setAttribute('tooltiptext', item.tooltiptext); m.setAttribute('oncommand', 'this.registCommand();'); m.registCommand = item.func; popup.appendChild(m); }, ns); break; case 'UserScriptLoader-submenu-popup': ns.hideExcludeMenu.setAttribute('checked', ns.HIDE_EXCLUDE); ns.autoRebuildMenu.setAttribute('checked', ns.AUTO_REBUILD); break; } }, onPopupHidden: function(event) { var popup = event.target; switch(popup.id) { case 'UserScriptLoader-popup': case 'UserScriptLoader-register-popup': var child = popup.firstChild; while (child && child.localName == 'menuitem') { popup.removeChild(child); child = popup.firstChild; } break; } }, menuClick: function(event){ var menuitem = event.target; if (event.button == 0 || menuitem.getAttribute('type') != 'checkbox') return; event.preventDefault(); event.stopPropagation(); if (event.button == 1) { menuitem.doCommand(); menuitem.setAttribute('checked', menuitem.getAttribute('checked') == 'true'? 'false' : 'true'); }else if (event.button == 2 && ns.EDITOR && menuitem.script) { var app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); app.initWithPath(ns.EDITOR); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(app); process.run(false, [menuitem.script._path], 1); } }, iconClick: function(event){ if (event.button == 0) { ns.disabled = !ns.disabled; ns.pref.setValue('disabled', ns.disabled); } else if (event.button == 1) ns.rebuild(); }, domContentLoaded: function(event) { var doc = event.target; if (!/^(?:https?|data|file|chrome):/.test(doc.location.protocol)) return; // document-start ????????? DOMContentLoaded ????? if (!ns.useDocumentStart) ns.injectScripts(ns.runAtStartScripts, doc); ns.injectScripts(ns.runAtEndScripts, doc); }, sidebarContentLoaded: function(event) { return; var doc = event.target; if (!/^(?:https?):/.test(doc.location.protocol)) return; if (!ns.useDocumentStart) ns.injectScripts(ns.runAtStartScripts, doc); ns.injectScripts(ns.runAtEndScripts, doc); }, onDocumentStart: function(event) { var doc = event.target; if (!/^(?:https?|data|file|chrome):/.test(doc.location.protocol)) return; if (doc.documentElement) { ns.injectScripts(ns.runAtStartScripts, doc); } else { doc.addEventListener('DOMNodeInserted', function(event){ event.currentTarget.removeEventListener(event.type, arguments.callee, false); ns.injectScripts(ns.runAtStartScripts, doc); }, false); } }, sidebarDocumentStart: function(event) { return; var doc = event.target; if (!/^(?:https?):/.test(doc.location.protocol)) return; ns.injectScripts(ns.runAtStartScripts, doc); }, injectScripts: function(scripts, aDocument) { if (scripts.length === 0) return; var contentWindow = aDocument.defaultView; var locationHref = contentWindow.location.href; var data = GrieverWindowStore.get(contentWindow); var unsafeWindow = contentWindow.wrappedJSObject || contentWindow; var wrappedWindow = new XPCNativeWrapper(unsafeWindow); var safeWindow = ns.fxver >= 4? { wrappedJSObject: unsafeWindow, __proto__: wrappedWindow }: wrappedWindow; if ("AutoPagerize" in data) safeWindow.AutoPagerize = data.AutoPagerize; var sbWindow = ns.fxver >= 4? window: wrappedWindow; var console = unsafeWindow.console || new Console(); if (!data.USL_registerCommands) data.USL_registerCommands = []; if (!data.USL_run) data.USL_run = []; scripts.filter(function(script) { if ("noframes" in script && contentWindow.frameElement instanceof HTMLIFrameElement) return false; if (!script._isURLMatching(locationHref)) return false; if (data.USL_run.indexOf(script) >= 0) { log('DABUTTAYO!!!!! ' + script.name); return false; } let sandbox = new Cu.Sandbox(sbWindow); sandbox.GM_log = log; sandbox.GM_xmlhttpRequest = GM_xmlhttpRequest; sandbox.GM_openInTab = function(url) { openNewTabWith(url); }; sandbox.GM_registerMenuCommand = function(label, func) { data.USL_registerCommands.push({ label:label, func:func, tooltiptext:(script.name || script._leafName) }); } sandbox.GM_getResourceText = function(name) { let obj = script._resourceValues[name]; if (obj.bytes) { return obj.bytes; } } sandbox.GM_getResourceURL = function(name) { let obj = script._resourceValues[name]; if (obj) { return 'data:' + obj.contentType + ';base64,' + btoa(obj.bytes); } } sandbox.GM_addStyle = function(code) GM_addStyle(code, sandbox.document); sandbox.GM_setValue = function(name, value) { return ns.USE_STORAGE_NAME.indexOf(name) >= 0? script._storage.setValue(script._prefName + name, value): script._pref.setValue(name, value); } sandbox.GM_getValue = function(name, def) { return ns.USE_STORAGE_NAME.indexOf(name) >= 0? script._storage.getValue(script._prefName + name, def): script._pref.getValue(name, def); } sandbox.GM_listValues = function() { var p = script._pref.listValues(); var s = script._storage.listValues(script._prefName + name).filter(function(e) e.indexOf(script._prefName) == 0); s.forEach(function(e, i, a) a[i] = e.replace(script._prefName, '')); p.push.apply(p, s); return p; } sandbox.GM_deleteValue = function(name) { return ns.USE_STORAGE_NAME.indexOf(name) >= 0? script._storage.deleteValue(script._prefName + name): script._pref.deleteValue(name); } sandbox.GM_setClipboard = function(str) { if (str.constructor === String || str.constructor === Number) { Cc['@mozilla.org/widget/clipboardhelper;1'].getService(Ci.nsIClipboardHelper).copyString(str); return; } return error('GM_setClipboard error.'); } sandbox.unsafeWindow = unsafeWindow; sandbox.window = safeWindow; sandbox.document = safeWindow.document; sandbox.XPathResult = Ci.nsIDOMXPathResult; sandbox.console = console; sandbox.__proto__ = safeWindow; if (script['run-at'] === 'document-start') { if (aDocument.documentElement) { ns.evalInSandbox(script, sandbox); } else { aDocument.addEventListener('readystatechange', function(event){ if (aDocument.readyState !== 'loading') { event.currentTarget.removeEventListener(event.type, arguments.callee, false); ns.evalInSandbox(script, sandbox); } }, false); } } else if (script['run-at'] === 'document-idle') { setTimeout(ns.evalInSandbox, 0, script, sandbox); } else { ns.evalInSandbox(script, sandbox); } data.USL_run.push(script); return true; }); }, evalInSandbox: function(aScript, aSandbox) { try{ Cu.evalInSandbox('(function() {' + aScript._requireSrc + aScript._code + '})();', aSandbox, "1.8"); } catch(e) { if (e.stack) { var evalErr = parseInt(e.stack.match(/\d+\s*$/)) || 0; var req = aScript._requireSrc? aScript._requireSrc.split('\n').length: 0; var line = e.lineNumber - evalErr - req + 2; error(aScript.name + ' / line:' + line + '\n' + e); } else { error(aScript._leafName + '\n' + e); } } }, } // Class function PrefManager(str) { var root = 'UserScriptLoader.'; if (str) root += str; this.pref = Cc["@mozilla.org/preferences-service;1"] .getService(Ci.nsIPrefService) .getBranch(root); } PrefManager.prototype = { setValue: function(name, value) { try { switch(typeof value) { case 'string' : var str = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); str.data = value; this.pref.setComplexValue(name, Ci.nsISupportsString, str); break; case 'number' : this.pref.setIntPref(name, value); break; case 'boolean': this.pref.setBoolPref(name, value); break; } } catch(e) { } }, getValue: function(name, defaultValue){ var value = defaultValue; try { switch(this.pref.getPrefType(name)) { case Ci.nsIPrefBranch.PREF_STRING: value = this.pref.getComplexValue(name, Ci.nsISupportsString).data; break; case Ci.nsIPrefBranch.PREF_INT : value = this.pref.getIntPref(name); break; case Ci.nsIPrefBranch.PREF_BOOL : value = this.pref.getBoolPref(name); break; } } catch(e) { } return value; }, deleteValue: function(name) { try { this.pref.deleteBranch(name); } catch(e) { } }, listValues: function() this.pref.getChildList("", {}), }; function StorageManager(name) { this.storage = window.globalStorage['UserScriptLoader.' + (name || '')]; } StorageManager.prototype = { setValue: function(key, value) { this.storage.setItem(key, value); }, getValue: function(key, defaultValue) { var value = defaultValue; try { value = this.storage.getItem(key).value; } catch (e) { } return value; }, deleteValue: function(key) { this.storage.removeItem(key); }, listValues: function() { var st = this.storage; var h = []; for (var n in st) { h.push(n); } return h; }, } function ScriptEntry(aFile) { this._readFile(aFile); this._getMetadata(); this._init(); this._includeRegExp = !this.include || this.include == '*'? new RegExp("^https?://") : this._createRegExp(this.include); this._excludeRegExp = !this.exclude || this.exclude == '*'? null : this._createRegExp(this.exclude); this._prefName = 'scriptival.' + (this.namespace || 'nonamespace/') + '/' + (this.name || this._leafName) + '.'; this._getResource(); } ScriptEntry.prototype = { _init: function() { this._disabled = false; this._requires = this.require? this.require.split('\n') : []; this._requireSrc = ''; this._resources = {}; this._resourceValues = {}; if (!this['run-at']) this['run-at'] = 'document-end'; if (this.resource) { let resource = this.resource.split('\n'); for (let i = 0, l = resource.length; i < l; i++) { let res = resource[i].split(/\s+/); this._resources[res[0]] = res[1]; } } this.__defineGetter__('_storage', function() { delete this._storage; return this._storage = new StorageManager('pref'); }); this.__defineGetter__('_pref', function() { delete this._pref; return this._pref = new PrefManager(this._prefName); }); this.__defineGetter__('_resourceStorage', function() { delete this._resourceStorage; return this._resourceStorage = new StorageManager('resource'); }); }, _readFile: function(aFile) { var stream = Cc['@mozilla.org/network/file-input-stream;1'].createInstance(Ci.nsIFileInputStream); stream.init(aFile,1,0,false); var ss = Cc['@mozilla.org/scriptableinputstream;1'].createInstance(Ci.nsIScriptableInputStream); ss.init(stream); var data = ss.read(ss.available()); ss.close(); stream.close(); try { data = decodeURIComponent(escape(data)); } catch(e) { } this._code = data; this._leafName = aFile.leafName; this._path = aFile.path; }, _getMetadata: function() { let m = this._code.match(/\/\/\s*==UserScript==[\s\S]+?\/\/\s*==\/UserScript==/); if (!m) return; m = (m+'').split(/[\r\n]+/); for (let i = 0; i < m.length; i++) { if (!/\/\/\s*?@(\S+)($|\s+([^\r\n]+))/.test(m[i])) continue; let name = RegExp.$1; let value = RegExp.$3; if (this[name]) { this[name] += '\n' + value; } else { this[name] = value; } } }, _createRegExp: function(urlstr) { let regstr = urlstr.split('\n').map(function(str) { var res = '^' + str.replace(/([()[\]{}|+.,^$?\\])/g, "\\$1").replace(/\*/g, '.*'); // from UCJSToolkit wildcardToRegex var tldRegExp = new RegExp("^(\\^(?:[^/]*)(?://)?(?:[^/]*))(\\\\\\.tld)((?:/.*)?)$"); var tldRes = res.match(tldRegExp); if (tldRes) { var tldStr = "\.(?:demon\\.co\\.uk|esc\\.edu\\.ar|(?:c[oi]\\.)?[^\\.]\\.(?:vt|ne|ks|il|hi|sc|nh|ia|wy|or|ma|vi|tn|in|az|id|nc|co|dc|nd|me|al|ak|de|wv|nm|mo|pr|nj|sd|md|va|ri|ut|ct|pa|ok|ky|mt|ga|la|oh|ms|wi|wa|gu|mi|tx|fl|ca|ar|mn|ny|nv)\\.us|[^\\.]\\.(?:(?:pvt\\.)?k12|cc|tec|lib|state|gen)\\.(?:vt|ne|ks|il|hi|sc|nh|ia|wy|or|ma|vi|tn|in|az|id|nc|co|dc|nd|me|al|ak|de|wv|nm|mo|pr|nj|sd|md|va|ri|ut|ct|pa|ok|ky|mt|ga|la|oh|ms|wi|wa|gu|mi|tx|fl|ca|ar|mn|ny|nv)\\.us|[^\\.]\\.vt|ne|ks|il|hi|sc|nh|ia|wy|or|ma|vi|tn|in|az|id|nc|co|dc|nd|me|al|ak|de|wv|nm|mo|pr|nj|sd|md|va|ri|ut|ct|pa|ok|ky|mt|ga|la|oh|ms|wi|wa|gu|mi|tx|fl|ca|ar|mn|ny|nvus|ne|gg|tr|mm|ki|biz|sj|my|hn|gl|ro|tn|co|br|coop|cy|bo|ck|tc|bv|ke|aero|cs|dm|km|bf|af|mv|ls|tm|jm|pg|ky|ga|pn|sv|mq|hu|za|se|uy|iq|ai|com|ve|na|ba|ph|xxx|no|lv|tf|kz|ma|in|id|si|re|om|by|fi|gs|ir|li|tz|td|cg|pa|am|tv|jo|bi|ee|cd|pk|mn|gd|nz|as|lc|ae|cn|ag|mx|sy|cx|cr|vi|sg|bm|kh|nr|bz|vu|kw|gf|al|uz|eh|int|ht|mw|gm|bg|gu|info|aw|gy|ac|ca|museum|sk|ax|es|kp|bb|sa|et|ie|tl|org|tj|cf|im|mk|de|pro|md|fm|cl|jp|bn|vn|gp|sm|ar|dj|bd|mc|ug|nu|ci|dk|nc|rw|aq|name|st|hm|mo|gq|ps|ge|ao|gr|va|is|mt|gi|la|bh|ms|bt|gb|it|wf|sb|ly|ng|gt|lu|il|pt|mh|eg|kg|pf|um|fr|sr|vg|fj|py|pm|sn|sd|au|sl|gh|us|mr|dz|ye|kn|cm|arpa|bw|lk|mg|tk|su|sc|ru|travel|az|ec|mz|lb|ml|bj|edu|pr|fk|lr|nf|np|do|mp|bs|to|cu|ch|yu|eu|mu|ni|pw|pl|gov|pe|an|ua|uk|gw|tp|kr|je|tt|net|fo|jobs|yt|cc|sh|io|zm|hk|th|so|er|cz|lt|mil|hr|gn|be|qa|cv|vc|tw|ws|ad|sz|at|tg|zw|nl|info\\.tn|org\\.sd|med\\.sd|com\\.hk|org\\.ai|edu\\.sg|at\\.tt|mail\\.pl|net\\.ni|pol\\.dz|hiroshima\\.jp|org\\.bh|edu\\.vu|net\\.im|ernet\\.in|nic\\.tt|com\\.tn|go\\.cr|jersey\\.je|bc\\.ca|com\\.la|go\\.jp|com\\.uy|tourism\\.tn|com\\.ec|conf\\.au|dk\\.org|shizuoka\\.jp|ac\\.vn|matsuyama\\.jp|agro\\.pl|yamaguchi\\.jp|edu\\.vn|yamanashi\\.jp|mil\\.in|sos\\.pl|bj\\.cn|net\\.au|ac\\.ae|psi\\.br|sch\\.ng|org\\.mt|edu\\.ai|edu\\.ck|ac\\.yu|org\\.ws|org\\.ng|rel\\.pl|uk\\.tt|com\\.py|aomori\\.jp|co\\.ug|video\\.hu|net\\.gg|org\\.pk|id\\.au|gov\\.zw|mil\\.tr|net\\.tn|org\\.ly|re\\.kr|mil\\.ye|mil\\.do|com\\.bb|net\\.vi|edu\\.na|co\\.za|asso\\.re|nom\\.pe|edu\\.tw|name\\.et|jl\\.cn|gov\\.ye|ehime\\.jp|miyazaki\\.jp|kanagawa\\.jp|gov\\.au|nm\\.cn|he\\.cn|edu\\.sd|mod\\.om|web\\.ve|edu\\.hk|medecin\\.fr|org\\.cu|info\\.au|edu\\.ve|nx\\.cn|alderney\\.gg|net\\.cu|org\\.za|mb\\.ca|com\\.ye|edu\\.pa|fed\\.us|ac\\.pa|alt\\.na|mil\\.lv|fukuoka\\.jp|gen\\.in|gr\\.jp|gov\\.br|gov\\.ac|id\\.fj|fukui\\.jp|hu\\.com|org\\.gu|net\\.ae|mil\\.ph|ltd\\.je|alt\\.za|gov\\.np|edu\\.jo|net\\.gu|g12\\.br|org\\.tn|store\\.co|fin\\.tn|ac\\.nz|gouv\\.fr|gov\\.il|org\\.ua|org\\.do|org\\.fj|sci\\.eg|gov\\.tt|cci\\.fr|tokyo\\.jp|net\\.lv|gov\\.lc|ind\\.br|ca\\.tt|gos\\.pk|hi\\.cn|net\\.do|co\\.tv|web\\.co|com\\.pa|com\\.ng|ac\\.ma|gov\\.bh|org\\.zw|csiro\\.au|lakas\\.hu|gob\\.ni|gov\\.fk|org\\.sy|gov\\.lb|gov\\.je|ed\\.cr|nb\\.ca|net\\.uy|com\\.ua|media\\.hu|com\\.lb|nom\\.pl|org\\.br|hk\\.cn|co\\.hu|org\\.my|gov\\.dz|sld\\.pa|gob\\.pk|net\\.uk|guernsey\\.gg|nara\\.jp|telememo\\.au|k12\\.tr|org\\.nz|pub\\.sa|edu\\.ac|com\\.dz|edu\\.lv|edu\\.pk|com\\.ph|net\\.na|net\\.et|id\\.lv|au\\.com|ac\\.ng|com\\.my|net\\.cy|unam\\.na|nom\\.za|net\\.np|info\\.pl|priv\\.hu|rec\\.ve|ac\\.uk|edu\\.mm|go\\.ug|ac\\.ug|co\\.dk|net\\.tt|oita\\.jp|fi\\.cr|org\\.ac|aichi\\.jp|org\\.tt|edu\\.bh|us\\.com|ac\\.kr|js\\.cn|edu\\.ni|com\\.mt|fam\\.pk|experts-comptables\\.fr|or\\.kr|org\\.au|web\\.pk|mil\\.jo|biz\\.pl|org\\.np|city\\.hu|org\\.uy|auto\\.pl|aid\\.pl|bib\\.ve|mo\\.cn|br\\.com|dns\\.be|sh\\.cn|org\\.mo|com\\.sg|me\\.uk|gov\\.kw|eun\\.eg|kagoshima\\.jp|ln\\.cn|seoul\\.kr|school\\.fj|com\\.mk|e164\\.arpa|rnu\\.tn|pro\\.ae|org\\.om|gov\\.my|net\\.ye|gov\\.do|co\\.im|org\\.lb|plc\\.co\\.im|net\\.jp|go\\.id|net\\.tw|gov\\.ai|tlf\\.nr|ac\\.im|com\\.do|net\\.py|tozsde\\.hu|com\\.na|tottori\\.jp|net\\.ge|gov\\.cn|org\\.bb|net\\.bs|ac\\.za|rns\\.tn|biz\\.pk|gov\\.ge|org\\.uk|org\\.fk|nhs\\.uk|net\\.bh|tm\\.za|co\\.nz|gov\\.jp|jogasz\\.hu|shop\\.pl|media\\.pl|chiba\\.jp|city\\.za|org\\.ck|net\\.id|com\\.ar|gon\\.pk|gov\\.om|idf\\.il|net\\.cn|prd\\.fr|co\\.in|or\\.ug|red\\.sv|edu\\.lb|k12\\.ec|gx\\.cn|net\\.nz|info\\.hu|ac\\.zw|info\\.tt|com\\.ws|org\\.gg|com\\.et|ac\\.jp|ac\\.at|avocat\\.fr|org\\.ph|sark\\.gg|org\\.ve|tm\\.pl|net\\.pg|gov\\.co|com\\.lc|film\\.hu|ishikawa\\.jp|hotel\\.hu|hl\\.cn|edu\\.ge|com\\.bm|ac\\.om|tec\\.ve|edu\\.tr|cq\\.cn|com\\.pk|firm\\.in|inf\\.br|gunma\\.jp|gov\\.tn|oz\\.au|nf\\.ca|akita\\.jp|net\\.sd|tourism\\.pl|net\\.bb|or\\.at|idv\\.tw|dni\\.us|org\\.mx|conf\\.lv|net\\.jo|nic\\.in|info\\.vn|pe\\.kr|tw\\.cn|org\\.eg|ad\\.jp|hb\\.cn|kyonggi\\.kr|bourse\\.za|org\\.sb|gov\\.gg|net\\.br|mil\\.pe|kobe\\.jp|net\\.sa|edu\\.mt|org\\.vn|yokohama\\.jp|net\\.il|ac\\.cr|edu\\.sb|nagano\\.jp|travel\\.pl|gov\\.tr|com\\.sv|co\\.il|rec\\.br|biz\\.om|com\\.mm|com\\.az|org\\.vu|edu\\.ng|com\\.mx|info\\.co|realestate\\.pl|mil\\.sh|yamagata\\.jp|or\\.id|org\\.ae|greta\\.fr|k12\\.il|com\\.tw|gov\\.ve|arts\\.ve|cul\\.na|gov\\.kh|org\\.bm|etc\\.br|or\\.th|ch\\.vu|de\\.tt|ind\\.je|org\\.tw|nom\\.fr|co\\.tt|net\\.lc|intl\\.tn|shiga\\.jp|pvt\\.ge|gov\\.ua|org\\.pe|net\\.kh|co\\.vi|iwi\\.nz|biz\\.vn|gov\\.ck|edu\\.eg|zj\\.cn|press\\.ma|ac\\.in|eu\\.tt|art\\.do|med\\.ec|bbs\\.tr|gov\\.uk|edu\\.ua|eu\\.com|web\\.do|szex\\.hu|mil\\.kh|gen\\.nz|okinawa\\.jp|mob\\.nr|edu\\.ws|edu\\.sv|xj\\.cn|net\\.ru|dk\\.tt|erotika\\.hu|com\\.sh|cn\\.com|edu\\.pl|com\\.nc|org\\.il|arts\\.co|chirurgiens-dentistes\\.fr|net\\.pa|takamatsu\\.jp|net\\.ng|org\\.hu|net\\.in|net\\.vu|gen\\.tr|shop\\.hu|com\\.ae|tokushima\\.jp|za\\.com|gov\\.eg|co\\.jp|uba\\.ar|net\\.my|biz\\.et|art\\.br|ac\\.fk|gob\\.pe|com\\.bs|co\\.ae|de\\.net|net\\.eg|hyogo\\.jp|edunet\\.tn|museum\\.om|nom\\.ve|rnrt\\.tn|hn\\.cn|com\\.fk|edu\\.dz|ne\\.kr|co\\.je|sch\\.uk|priv\\.pl|sp\\.br|net\\.hk|name\\.vn|com\\.sa|edu\\.bm|qc\\.ca|bolt\\.hu|per\\.kh|sn\\.cn|mil\\.id|kagawa\\.jp|utsunomiya\\.jp|erotica\\.hu|gd\\.cn|net\\.tr|edu\\.np|asn\\.au|com\\.gu|ind\\.tn|mil\\.br|net\\.lb|nom\\.co|org\\.la|mil\\.pl|ac\\.il|gov\\.jo|com\\.kw|edu\\.sh|otc\\.au|gmina\\.pl|per\\.sg|gov\\.mo|int\\.ve|news\\.hu|sec\\.ps|ac\\.pg|health\\.vn|sex\\.pl|net\\.nc|qc\\.com|idv\\.hk|org\\.hk|gok\\.pk|com\\.ac|tochigi\\.jp|gsm\\.pl|law\\.za|pro\\.vn|edu\\.pe|info\\.et|sch\\.gg|com\\.vn|gov\\.bm|com\\.cn|mod\\.uk|gov\\.ps|toyama\\.jp|gv\\.at|yk\\.ca|org\\.et|suli\\.hu|edu\\.my|org\\.mm|co\\.yu|int\\.ar|pe\\.ca|tm\\.hu|net\\.sb|org\\.yu|com\\.ru|com\\.pe|edu\\.kh|edu\\.kw|org\\.qa|med\\.om|net\\.ws|org\\.in|turystyka\\.pl|store\\.ve|org\\.bs|mil\\.uy|net\\.ar|iwate\\.jp|org\\.nc|us\\.tt|gov\\.sh|nom\\.fk|go\\.th|gov\\.ec|com\\.br|edu\\.do|gov\\.ng|pro\\.tt|sapporo\\.jp|net\\.ua|tm\\.fr|com\\.lv|com\\.mo|edu\\.uk|fin\\.ec|edu\\.ps|ru\\.com|edu\\.ec|ac\\.fj|net\\.mm|veterinaire\\.fr|nom\\.re|ingatlan\\.hu|fr\\.vu|ne\\.jp|int\\.co|gov\\.cy|org\\.lv|de\\.com|nagasaki\\.jp|com\\.sb|gov\\.za|org\\.lc|com\\.fj|ind\\.in|or\\.cr|sc\\.cn|chambagri\\.fr|or\\.jp|forum\\.hu|tmp\\.br|reklam\\.hu|gob\\.sv|com\\.pl|saitama\\.jp|name\\.tt|niigata\\.jp|sklep\\.pl|nom\\.ni|co\\.ma|net\\.la|co\\.om|pharmacien\\.fr|port\\.fr|mil\\.gu|au\\.tt|edu\\.gu|ngo\\.ph|com\\.ve|ac\\.th|gov\\.fj|barreau\\.fr|net\\.ac|ac\\.je|org\\.kw|sport\\.hu|ac\\.cn|net\\.bm|ibaraki\\.jp|tel\\.no|org\\.cy|edu\\.mo|gb\\.net|kyoto\\.jp|sch\\.sa|com\\.au|edu\\.lc|fax\\.nr|gov\\.mm|it\\.tt|org\\.jo|nat\\.tn|mil\\.ve|be\\.tt|org\\.az|rec\\.co|co\\.ve|gifu\\.jp|net\\.th|hokkaido\\.jp|ac\\.gg|go\\.kr|edu\\.ye|qh\\.cn|ab\\.ca|org\\.cn|no\\.com|co\\.uk|gov\\.gu|de\\.vu|miasta\\.pl|kawasaki\\.jp|co\\.cr|miyagi\\.jp|org\\.jp|osaka\\.jp|web\\.za|net\\.za|gov\\.pk|gov\\.vn|agrar\\.hu|asn\\.lv|org\\.sv|net\\.sh|org\\.sa|org\\.dz|assedic\\.fr|com\\.sy|net\\.ph|mil\\.ge|es\\.tt|mobile\\.nr|co\\.kr|ltd\\.uk|ac\\.be|fgov\\.be|geek\\.nz|ind\\.gg|net\\.mt|maori\\.nz|ens\\.tn|edu\\.py|gov\\.sd|gov\\.qa|nt\\.ca|com\\.pg|org\\.kh|pc\\.pl|com\\.eg|net\\.ly|se\\.com|gb\\.com|edu\\.ar|sch\\.je|mil\\.ac|mil\\.ar|okayama\\.jp|gov\\.sg|ac\\.id|co\\.id|com\\.ly|huissier-justice\\.fr|nic\\.im|gov\\.lv|nu\\.ca|org\\.sg|com\\.kh|org\\.vi|sa\\.cr|lg\\.jp|ns\\.ca|edu\\.co|gov\\.im|edu\\.om|net\\.dz|org\\.pl|pp\\.ru|tm\\.mt|org\\.ar|co\\.gg|org\\.im|edu\\.qa|org\\.py|edu\\.uy|targi\\.pl|com\\.ge|gub\\.uy|gov\\.ar|ltd\\.gg|fr\\.tt|net\\.qa|com\\.np|ass\\.dz|se\\.tt|com\\.ai|org\\.ma|plo\\.ps|co\\.at|med\\.sa|net\\.sg|kanazawa\\.jp|com\\.fr|school\\.za|net\\.pl|ngo\\.za|net\\.sy|ed\\.jp|org\\.na|net\\.ma|asso\\.fr|police\\.uk|powiat\\.pl|govt\\.nz|sk\\.ca|tj\\.cn|mil\\.ec|com\\.jo|net\\.mo|notaires\\.fr|avoues\\.fr|aeroport\\.fr|yn\\.cn|gov\\.et|gov\\.sa|gov\\.ae|com\\.tt|art\\.dz|firm\\.ve|com\\.sd|school\\.nz|edu\\.et|gob\\.pa|telecom\\.na|ac\\.cy|gz\\.cn|net\\.kw|mobil\\.nr|nic\\.uk|co\\.th|com\\.vu|com\\.re|belgie\\.be|nl\\.ca|uk\\.com|com\\.om|utazas\\.hu|presse\\.fr|co\\.ck|xz\\.cn|org\\.tr|mil\\.co|edu\\.cn|net\\.ec|on\\.ca|konyvelo\\.hu|gop\\.pk|net\\.om|info\\.ve|com\\.ni|sa\\.com|com\\.tr|sch\\.sd|fukushima\\.jp|tel\\.nr|atm\\.pl|kitakyushu\\.jp|com\\.qa|firm\\.co|edu\\.tt|games\\.hu|mil\\.nz|cri\\.nz|net\\.az|org\\.ge|mie\\.jp|net\\.mx|sch\\.ae|nieruchomosci\\.pl|int\\.vn|edu\\.za|com\\.cy|wakayama\\.jp|gov\\.hk|org\\.pa|edu\\.au|gov\\.in|pro\\.om|2000\\.hu|szkola\\.pl|shimane\\.jp|co\\.zw|gove\\.tw|com\\.co|net\\.ck|net\\.pk|net\\.ve|org\\.ru|uk\\.net|org\\.co|uu\\.mt|com\\.cu|mil\\.za|plc\\.uk|lkd\\.co\\.im|gs\\.cn|sex\\.hu|net\\.je|kumamoto\\.jp|mil\\.lb|edu\\.yu|gov\\.ws|sendai\\.jp|eu\\.org|ah\\.cn|net\\.vn|gov\\.sb|net\\.pe|nagoya\\.jp|geometre-expert\\.fr|net\\.fk|biz\\.tt|org\\.sh|edu\\.sa|saga\\.jp|sx\\.cn|org\\.je|org\\.ye|muni\\.il|kochi\\.jp|com\\.bh|org\\.ec|priv\\.at|gov\\.sy|org\\.ni|casino\\.hu|res\\.in|uy\\.com)" //var tldStr = "\.(?:(?:[a-z0-9]{2}\.)?[a-z0-9]{2,3}|(?:[a-z]+\.)?jp)"; res = tldRes[1] + tldStr + tldRes[3]; } return res + "$"; }).join('|'); return new RegExp(regstr); }, _isURLMatching: function(url) { return !this._disabled && this._includeRegExp.test(url) && (!this._excludeRegExp || !this._excludeRegExp.test(url)); }, _getResource: function() { var self = this; if (this._requires.length) { for (let i = 0, l = this._requires.length; i < l; i++) { let requireURL = this._requires[i]; let json = this._resourceStorage.getValue(requireURL); if (json) { json = JSON.parse(json); let val = json.bytes; try { val = decodeURIComponent(escape(val)); } catch (e) { } this._requireSrc += val + '\n'; continue; } getContents(requireURL, function(bytes, contentType){ var js = { bytes: bytes, contentType: contentType }; js = JSON.stringify(js); self._resourceStorage.setValue(requireURL, js); let val = bytes; try { val = decodeURIComponent(escape(val)); } catch (e) { } self._requireSrc += val + '\n'; }); } } for (let n in this._resources) { let resourceURL = this._resources[n]; let json = this._resourceStorage.getValue(resourceURL); if (json) { json = JSON.parse(json); this._resourceValues[n] = json; continue; } getContents(resourceURL, function(bytes, contentType){ let obj = { bytes: bytes, contentType: contentType }; let json = JSON.stringify(obj); self._resourceStorage.setValue(resourceURL, json); self._resourceValues[n] = obj; }); } } }; function Console() {} Console.prototype = { log: function(str){ Application.console.log(str); }, time: function(name) { this['_' + name] = new Date().getTime(); }, timeEnd: function(name) { if (typeof this['_' + name] == 'undefined') return this.log('timeEnd: Error' + name); this.log(name + ':' + (new Date().getTime() - this['_' + name])); delete this['_' + name]; }, }; ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"] .forEach(function(name){ if (name in this) return; this[name] = function(){}; }, Console.prototype); function getContents(aURL, callback){ try{ urlSecurityCheck(aURL, gBrowser.contentPrincipal,Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL); }catch(ex){ return; } var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var channel = ioService.newChannel(aURL,null,null); if (channel.URI.scheme != 'http' && channel.URI.scheme != 'https') return error('getContents is "http" or "https" only'); var listener = { data: "", onStartRequest: function (request, context) { this.data = ""; }, onDataAvailable: function (request, context, inputStream, offset, count) { var bs = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream); bs.setInputStream(inputStream); var n = bs.available(); var bytes = bs.readBytes(n); this.data += bytes; bs.close(); }, onStopRequest: function (request, context, statusCode) { if (Components.isSuccessCode(statusCode)) { this.callback.apply(this, [this.data, channel.contentType]); } else { } }, callback: callback }; channel.asyncOpen(listener, null); debug("getContents: " + aURL); } function GM_addStyle(code, doc) { var head = doc.getElementsByTagName('head')[0]; if (head) { var style = doc.createElement('style'); style.type = 'text/css'; style.appendChild(doc.createTextNode(code)); head.appendChild(style); return style; } } function GM_xmlhttpRequest(obj) { if(typeof(obj) != 'object' || (typeof(obj.url) != 'string' && !(obj.url instanceof String))) return; var req = new XMLHttpRequest(); req.open(obj.method || 'GET',obj.url,true); if(typeof(obj.headers) == 'object') for(var i in obj.headers) req.setRequestHeader(i,obj.headers[i]); ['onload','onerror','onreadystatechange'].forEach(function(k) { if(obj[k] && (typeof(obj[k]) == 'function' || obj[k] instanceof Function)) req[k] = function() { obj[k]({ status : (req.readyState == 4) ? req.status : 0, statusText : (req.readyState == 4) ? req.statusText : '', responseHeaders : (req.readyState == 4) ? req.getAllResponseHeaders() : '', responseText : req.responseText, readyState : req.readyState, finalUrl : (req.readyState == 4) ? req.channel.URI.spec : '' }); }; }); if(obj.overrideMimeType) req.overrideMimeType(obj.overrideMimeType); var c = 0; var timer = setInterval(function() { if(req.readyState == 1 || ++c > 100) { clearInterval(timer); req.send(obj.data || null); } },10); debug('GM_xmlhttpRequest ' + obj.url); } function log(str) { Application.console.log(str); } function debug() { if (ns.DEBUG) Application.console.log('DEBUG: ' + Array.slice(arguments));} function error(str) { var consoleSvc = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService); var err = Cc["@mozilla.org/scripterror;1"].createInstance(Ci.nsIScriptError); err.init(str, null, null, null, null, err.errorFlag, null); consoleSvc.logMessage(err); } // http://gist.github.com/321205 function $(id) document.getElementById(id); function $E(xml, doc) { doc = doc || document; xml = <root xmlns={doc.documentElement.namespaceURI}/>.appendChild(xml); var settings = XML.settings(); XML.prettyPrinting = false; var root = new DOMParser().parseFromString(xml.toXMLString(), 'application/xml').documentElement; XML.setSettings(settings); doc.adoptNode(root); var range = doc.createRange(); range.selectNodeContents(root); var frag = range.extractContents(); range.detach(); return frag.childNodes.length < 2 ? frag.firstChild : frag; } (function(){ const currentRevision = 1.1; const namespace = 'GrieverWindowStore'; if (namespace in window && window[namespace].version >= currentRevision) return; var fxver = parseFloat(Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo).version); var table = []; var data = []; window[namespace] = fxver >= 4? { version: currentRevision, get table() table, get data() data, getId: function(obj) { if (!obj || obj instanceof Window === false) return -1; try { return obj .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindowUtils) .currentInnerWindowID; } catch(e) { Cu.reportError(e); } return -1; }, indexOf: function(id) { return table.indexOf(id); }, get: function(obj){ if (obj instanceof Window === false) return null; var id = this.getId(obj); var index = this.indexOf(id); if (index >= 0) return data[index]; var url = obj.location.href; var dataObj = { toString: function() url, id: id }; table.push(id); data.push(dataObj); obj.addEventListener('pagehide', this, false); return dataObj; }, delete: function(obj){ if (obj instanceof Window === false) return false; var id = this.getId(obj); var index = this.indexOf(id); if (index == -1) return false; table.splice(index, 1); data.splice(index, 1); return true; }, handleEvent: function(event) { switch (event.type) { case 'pagehide': event.currentTarget.removeEventListener('pagehide', this, false); this.delete(event.currentTarget); break; } }, } : { version: currentRevision, get table() table, get data() data, indexOf: function(obj) { if (!(obj instanceof Window)) return -1; var id = -1; table.some(function(e, i, a) e == obj? (id = i, true) : false); return id; }, get: function(obj){ if (!(obj instanceof Window)) return null; var id = this.indexOf(obj); if (id >= 0) return data[id]; var url = obj.location.href; var dataObj = { toString: function() url }; table.push(obj); data.push(dataObj); obj.addEventListener('pagehide', this, false); return dataObj; }, delete: function(obj){ if (!(obj instanceof Window)) return false; var id = this.indexOf(obj); if (id == -1) return false; table.splice(id, 1); data.splice(id, 1); return true; }, handleEvent: function(event) { switch (event.type) { case 'pagehide': event.currentTarget.removeEventListener('pagehide', this, false); this.delete(event.currentTarget); break; } }, } })(); return ns; })(); window.UserScriptLoader.init();
Отредактировано bunda1 (12-12-2011 20:26:48)
Отсутствует
Можно кнопочку переключающую true/false параметра в about:config - конкретно dom.ipc.plugins.enabled ?
Добавлено 12-12-2011 22:51:04
Вот CB код каторый заменяет greasemonkey.
Скрипты сохраняй в папку \Profile\chrome\UserScriptLoader, скрипт в папке должен быть вот таким 47007.user
bunda1
Это что, просто присвить скриптам другое окончание - поменять .user.js на .user ?
Отредактировано Крошка Ру (13-12-2011 01:53:22)
Отсутствует
Можно кнопочку переключающую true/false параметра в about:config - конкретно dom.ipc.plugins.enabled
Использование:создать новую CB кнопку, положить код в в инициализацию.
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ // переключаем настройки в about:config(toggle preference) var s = "dom.ipc.plugins.enabled"; custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); //Запускаем функцию fmini(run function fmini) ToggleImage(event); } }; //Изменить иконку кнопки................................................................. var button = this; function ToggleImage(event){ // toggle button image if (custombuttonsUtils. getPrefs ("dom.ipc.plugins.enabled", true)) { button.image="data:image/x-icon;base64,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"; } else { button.image="data:image/x-icon;base64,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"; } }; ToggleImage(event);
Это что, просто присвить скриптам другое окончание - поменять .user.js на .user ?
нет
Отредактировано bunda1 (13-12-2011 09:24:34)
Отсутствует
bunda1
Кнопку положил в инициализацию другой. Скрипт %AppData%\Mozilla\Firefox\Profiles\default\chrome\UserScriptLoader\47007.user
По ПКМ кроме меню есть user script command. Скрипт не появляется и при перезапуске.
Пробывал скрипт ещё кинуть 120098.user. Тоже не работает.
>то что, просто присвить скриптам другое окончание - поменять .user.js на .user ?
>нет
а как тогда?
И я всё равно не понял как по кнопке, даже если всё заработает, активировать скрипт, который будет лежать в папке.
Для кнопки понятно: у неё есть код и инициализация. Нажал - код выполнился.
А кнопка с JS? Какой скрипт она выберет? Или нужна новая кнопка и будет у неё в коде что-то вроде runscript(47007)?
Inko7
Ищите проблему у себя. Пользуюсь Bugmenot 2.2 регулярно и никаких проблем нет!
Я даже ff на чистую виртуалку поставил - не хочет
Отредактировано SendInfo (13-12-2011 11:44:38)
Отсутствует
SendInfo
Ищите проблему у себя. Пользуюсь Bugmenot 2.2 регулярно и никаких проблем нет!
Блин, вы как сглазили - перестало работать и у меня
Еще на той неделе все ок было, а теперь и дополнение и букмарклет приказали долго жить. Думаю, что-то с самим сайтом багминота...
Узнавал у товарищей - та же проблема! Перестало и совсем недавно...
Так что, звыняйте
P.S Как вариант - Bypass.rd.to - но база не сильно большая
Отредактировано Inko7 (13-12-2011 13:14:49)
Отсутствует
создать новую CB кнопку, положить код в в инициализацию.
bunda1
Спасибо код работает , но для того чтобы активировать plugin-container.exe нужно перезапускать , а иначе нельзя ? ... если никак, то хотя бы вшить в эту кнопку код перезапуска браузера сразу после переключения парамера
Это что, просто присвить скриптам другое окончание - поменять .user.js на .user ?
нет
про папку то я понял - имел в виду скрипты GM - после создания кнопки их достаточно просто положить в UserScriptLoader или что-то ещё ?
Отредактировано Крошка Ру (13-12-2011 18:17:36)
Отсутствует
Помогите пожалуйста сделать кнопку, которая сохраняла бы текущую дату дд.мм.гггг. и время чч.мм.сс в файл c:/log.txtОчень нужно! Спасибо!
Помогите пожалуйста с моим вопросом, мне очень нужно!
Отсутствует
код работает , но для того чтобы активировать plugin-container.exe нужно перезапускать
......вшить в эту кнопку код перезапуска браузера сразу после переключения парамера
Использование: создать новую CB кнопку, положить код в в инициализацию.
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ // переключаем настройки в about:config(toggle preference) var s = "dom.ipc.plugins.enabled"; custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); //Запускаем функцию 'ToggleImage' ToggleImage(event); //Запускаем функцию 'Restart' Restart(event); } }; //Изменить иконку кнопки................................................................. var button = this; function ToggleImage(event){ // toggle button image if (custombuttonsUtils. getPrefs ("dom.ipc.plugins.enabled", true)) { button.image="data:image/x-icon;base64,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"; } else { button.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); // Перезапуск ........................................................................... Restart = function(event){ const nsIAppStartup = Components.interfaces.nsIAppStartup; // Notify all windows that an application quit has been requested. var os = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"] .createInstance(Components.interfaces.nsISupportsPRBool); os.notifyObservers(cancelQuit, "quit-application-requested", "restart"); // Something aborted the quit process. if (!cancelQuit.data) Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup) .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);}
про папку то я понял - имел в виду скрипты GM - после создания кнопки их достаточно просто положить в UserScriptLoader или что-то ещё ?
просто положить в папку UserScriptLoader + перезапуск браузера
Добавлено 13-12-2011 20:03:04
bunda1
Кнопку положил в инициализацию другой. Скрипт %AppData%\Mozilla\Firefox\Profiles\default\chrome\UserScriptLoader\47007.user
.....\Data\profile\chrome\UserScriptLoader
И я всё равно не понял как по кнопке, даже если всё заработает, активировать скрипт, который будет лежать в папке.
Для кнопки понятно: у неё есть код и инициализация. Нажал - код выполнился.
А кнопка с JS? Какой скрипт она выберет? Или нужна новая кнопка и будет у неё в коде что-то вроде runscript(47007)?
просто положить скрипт в папку UserScriptLoader + перезапуск браузера, на панели дополнений кнопка которая открывает меню для управление скриптами- там можно не нужный скрипт отключить.
Отредактировано bunda1 (13-12-2011 20:03:04)
Отсутствует
Помогите переделать этот код, чтоб он не закрывал AppTabs, пожалуйста.
var br = getBrowser(); var cTab = br.mCurrentTab; var tabs = br.mTabContainer.childNodes; var left = false; for(var i = tabs.length - 1; i >= 0; --i) { if(left) br.removeTab(tabs[i]); if(tabs[i] == cTab) left = true; }
Отсутствует
создать новую CB кнопку, положить код в в инициализацию.
bunda1
ага, спасибо работает - plugin-container.exe выгружается при перезапуске
просто положить в папку UserScriptLoader + перезапуск браузера
понял
Отсутствует
Насчёт vimeo: я задал (17,26).
vitalii201 только сейчас заметил .... у меня тоже вышло 17 - нечайно наткнулся на кусок кода для вставки на сайт , и там адрес был не http://player.vimeo.com/video/ а http://vimeo.com/moogaloop.swf?clip_id=
и дальше восемь цифр , вот так >http://vimeo.com/moogaloop.swf?clip_id=33440713
okkamas_knife
вообщем получилось
var url1="http://vimeo.com/moogaloop.swf?clip_id="; var url = window._content.document.location.href; var chkpoint="moogaloop.swf?clip_id="; var url=url.slice(17,55); var arrayOfStrings = url.split(chkpoint); var url2=arrayOfStrings[0]; loadURI(url1+url2) const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); gClipboardHelper.copyString(url1+url2)
Отсутствует