Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№427606-07-2012 01:19:32

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

bunda1
спасибо за "Изменить масштаб"
по поводу 02-07-2012 21:51:36  хотелось бы уточнить. :)

чуть не забыл, кнопка Memory Monitor в 13.0.1 в стандартной теме выглядит вот так, это так и нужно?

скрытый текст
41f969e8fdb6.png

Отредактировано skynet281978 (06-07-2012 01:21:33)

Отсутствует

 

№427706-07-2012 08:18:32

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 3.6

Re: Custom Buttons

skynet281978 пишет

по поводу 02-07-2012 21:51:36  хотелось бы уточнить. :)

сегодня сделаю

skynet281978 пишет

чуть не забыл, кнопка Memory Monitor в 13.0.1 в стандартной теме выглядит вот так, это так и нужно?

в userChrome.css

Выделить код

Код:

#MemoryDisplay{
-moz-appearance: none !important;
border: 0px !important;}

Отсутствует

 

№427806-07-2012 09:08:28

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

Кнопка Save

4.Capture a region on a page as PNG - сохраняет выделенную область страницы как PNG-изображение,

5. Save entire frame as PNG - сохраняет фреймы на странице как PNG-изображение,

6.Save visible portion as PNG - сохраняет видимую область страницы как PNG-изображение,

7.Save web page as PNG - сохраняет страницу как  PNG-изображение(делает скриншот страницы)

можно добавить возможность открытия сохраняемого изображения во внешнем редакторе ? :angel:

Добавлено 06-07-2012 09:13:08
... в идеале конечно лучше бы код этих четырёх опций выпилить и поместить в отдельную кнопочку - скриншотер :sick: :whistle: :)

Отредактировано Крошка Ру (06-07-2012 09:13:08)

Отсутствует

 

№427906-07-2012 09:23:17

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

bunda1 пишет

skynet281978 пишет:
чуть не забыл, кнопка Memory Monitor в 13.0.1 в стандартной теме выглядит вот так, это так и нужно?

в userChrome.css
Код:

#MemoryDisplay{
-moz-appearance: none !important;
border: 0px !important;}

а этот код нельзя в кнопку Memory Monitor добавить чтобы не плодить стили отдельно?
если можно то где прописать?

Отредактировано skynet281978 (06-07-2012 09:24:07)

Отсутствует

 

№428006-07-2012 10:02:26

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

Автоматически прижимать горизонтальную полосу прокрутки к правому краю blush2.1341554486.gif

Отсутствует

 

№428106-07-2012 12:09:45

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

okkamas_knife, Спасибо :) .... помнил же что подобная кнопка была :blush:

Отсутствует

 

№428206-07-2012 13:50:55

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

okkamas_knife, поискал по теме , но нашёл тут такую кнопку >

Scroll Page

Выделить код

Код:

**
 * @author Anton Glazatov (c) 03.2008
 * Scroll page button based on existing button idea
 * new implementation
 *
 * Left click - scroll slow down
 * Middle click - stop scroll
 * Right click - scroll slow up
 * Left double click - scroll fast down
 * Right double click - scroll fast up
 * Shift + Right click - Custom Buttons context menu
 */

в инициализацию:

Выделить код

Код:

function Scroller (oDocument)
{
    this. oDocument = oDocument;
    this. oDocument. defaultView. addEventListener ("keydown", this, false);
}
Scroller. prototype =
{
    oDocument: null,
    oTimer: null,
    
    _nSpeed: 1,
    _nDelay: 150,
    
    get _window ()
    {
        return this. oDocument. defaultView;
    },
    
    revertScroll: function ()
    {
        if (this. _nSpeed > 0)
            this. _nSpeed = -this. _nSpeed;
    },
    
    setSpeed: function (nSpeed)
    {
        this. _nSpeed = nSpeed;
    },
    
    setDelay: function (nDelay)
    {
        this. stopScroll ();
        this. _nDelay = nDelay;
    },
    
    scroll: function ()
    {
        var win = this. _window;
        if (((this. _nSpeed < 0) && (win. pageYOffset > 0)) ||
            ((this. _nSpeed > 0) && (win. pageYOffset < (this. oDocument. height - win. innerHeight))))
            this. _window. scrollBy (0, this. _nSpeed);
        else
            this. stopScroll ();
    },
    
    stopScroll: function ()
    {
        if (this. oTimer)
        {
            this. oTimer. cancel ();
            this. oTimer = null;
        }
    },
    
    startScroll: function ()
    {
        if (this. oTimer)
            this. stopTimer ();
        this. oTimer = Components. classes ["@mozilla.org/timer;1"].
                       createInstance (Components. interfaces. nsITimer);
        this. oTimer. initWithCallback (this, this. _nDelay, 1);            
    },
    
    QueryInterface: function (iid)
    {
        if (iid. equals (Components. interfaces. nsISupports) ||
            iid. equals (Components. interfaces. nsITimerCallback))
            return this;
        return Components. results. NS_ERROR_NO_INTERFACE;
    },
    
    notify: function (oTimer)
    {
        this. scroll ();
    },
    
    handleEvent: function (event)
    {
        this. stopScroll ();
    }
};

this. doScroll = function (oEvent)
{
    var scroller = this. getScroller ();
    if (oEvent. button == 1)
    {
        scroller. stopScroll ();
        return;
    }
    if (oEvent. button == 2)
        scroller. revertScroll ();
    scroller. startScroll ();
};

this. scrollPage = function (evt)
{
    var scroller = this. getScroller ();
    scroller. setSpeed (1);
    scroller. setDelay (150);
    if (evt. button == 2 && evt. shiftKey)
        this. showPopup (this);
    else
        this. doScroll (evt);
};
this. scrollPageFast = function (evt)
{
    var scroller = this. getScroller ();
    scroller. setSpeed (10);
    scroller. setDelay (50);
    this. doScroll (evt);
};
this. getScroller = function ()
{
    var ct = getBrowser (). selectedTab;
    if (!ct. cbScrollButton)
        ct. cbScrollButton = new Scroller (getBrowser (). contentDocument);
    return ct. cbScrollButton;
};

this. showPopup = function (node)
{
    var popup = document. getElementById ("custombuttons-contextpopup");
    var x = node. boxObject. x;
    var y = node. boxObject. y + node. boxObject. height;
    document. popupNode = node;
    popup. showPopup (node, x, y, "popup", null, null);
}
this. setAttribute ("onclick", "this.scrollPage(event);");
this. setAttribute ("ondblclick","this.scrollPageFast(event)");
this. setAttribute ("context", "");
this. tooltipText = 'Down/Menu/Up ~ Fast Down//Fast Up';

Отсутствует

 

№428306-07-2012 16:12:03

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 3.6

Re: Custom Buttons

skynet281978 пишет

а этот код нельзя в кнопку Memory Monitor добавить чтобы не плодить стили отдельно?
если можно то где прописать?

Попробуй после:

Выделить код

Код:

ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix));

добавыть

Выделить код

Код:

memoryPanel.style.MozAppearance = "none";
memoryPanel.style.border = "0px";

+ рестарт.

Отсутствует

 

№428406-07-2012 19:49:11

WatsonRus
Участник
 
Группа: Members
Зарегистрирован: 10-03-2009
Сообщений: 286
UA: Opera 8.5

Re: Custom Buttons

okkamas_knife пишет

А кто подскажет код для быстрого сохранения страницы в мхт\маф при использовании расширения MAF.
вобщем чтоб без диалога сохранения в папку по-умолчанию сохранялся файл?

Выделить код

Код:

mafSaveDocument(getBrowser().selectedBrowser.contentDocument,{mafAskSaveArchive: true})

это код для сохранения с запросом(тип файла берется отсюда extensions.maf.current.save.filterindex 1-mht 5-maf)
если поменять mafAskSaveArchive: true на false то ничего не происходит а в консоли вылазит ошибка.

Э-э-э, а просто с диалогом (или с выбором из меню - с диалогом/быстро, если удастся побороть быстро) можно кнопку для MAF замутить? Я тут несколько страниц назад спрашивал про подобную кнопку... интересует в основном mht... пусть даже с выставлением типа файла ручками в коде кнопки.

Отредактировано WatsonRus (06-07-2012 20:01:16)


Firefox ESR

Отсутствует

 

№428506-07-2012 20:45:15

init
Участник
 
Группа: Members
Зарегистрирован: 14-04-2012
Сообщений: 42
UA: Firefox 13.0

Re: Custom Buttons

Infocatcher пишет

Обещают убрать поддержку конструкций вида

Выделить код

Код:

var menu = <menu xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
        ...
    </menu>;

и

Выделить код

Код:

var multiline = <><![CDATA[
    А тут какой-то
    многострочный
    текст
    ]]></>.toString();

Так что перестанут работать все кнопки, использующие cbu.makeXML() / custombuttonsUtils.makeXML()

Если я правильно понял, то достаточно будет переписать эту функцию в расширении и тогда кнопки не отвалятся. Хотя такое решение выглядит странно. Как я понимаю это все делается из соображения безопасности?

Infocatcher пишет

Или вот есть JXON, который предлагают использовать взамен. Только вот встроенную реализацию забыли сделать, так что больше копипасты!

Значит это тоже нужно будет делать средствами расширения, если мозилловцы не сделают.

Отсутствует

 

№428606-07-2012 20:55:17

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4337
UA: Firefox 13.0

Re: Custom Buttons

init пишет

Если я правильно понял, то достаточно будет переписать эту функцию в расширении и тогда кнопки не отвалятся.

Нет, обещают отключить поддержку используемых синтаксических конструкций, так что переписывать как раз придется все кнопки, которые это используют.

init пишет

Как я понимаю это все делается из соображения безопасности?

Раньше там было

Mozilla is not actively maintaining E4X except for security bugs. Do not use it for any new work.

Лень поддерживать, надо полагать.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№428706-07-2012 20:59:54

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

bunda1 пишет

Попробуй после:

Код:

ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix));

добавыть

Код:

memoryPanel.style.MozAppearance = "none";
memoryPanel.style.border = "0px";

+ рестарт.

тогда пропадает разделитель между мемори и Изменить масштаб
иначе можно?

Отсутствует

 

№428806-07-2012 21:17:05

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 3.6

Re: Custom Buttons

skynet281978 пишет

Есть такая кнопка Догрузка не загруженных картинок
Возможно ли чтобы она работала из контекстного меню?
Наверно она нужна только в КМ страницы...

В инициализацию

скрытый текст

Выделить код

Код:

// Новый пункт 'Догрузка не загруженных картинок' в контекстное меню страницы.......................................
(function() {
  // Стоп, если функция уже выполнялась..........
   if (document.getElementById("context-reloadAllimage")) return;
   
   // Функция перезагружает все изображение на странице..........
   reloadImage = function(event){ 
   function reloadImage(img) {
   if(!(img instanceof Components.interfaces.nsIImageLoadingContent) || !img.currentURI)
        return;
   urlSecurityCheck(img.currentURI.spec,
                     gBrowser.contentPrincipal,
                     Components.interfaces.nsIScriptSecurityManager.DISALLOW_SCRIPT);
   img.forceReload();
   }
   function parseWin(win) {
    Array.forEach(win.frames, parseWin);
    Array.forEach(win.document.images, reloadImage);
    }
   parseWin(content);
   };
   
   // Создаем новый пункт контекстного меню..........
   var menuitem = document.createElement("menuitem");
   menuitem.setAttribute("id", "context-reloadAllimage");
   menuitem.setAttribute("oncommand", "reloadImage(event)");
   menuitem.setAttribute("label", "Догрузка не загруженных картинок");

   // Установить положение нового пункта относительно других пунктов меню
   var selectall = document.getElementById("context-viewbgimage");
   if (!selectall) return;
   selectall.parentNode.insertBefore(menuitem, selectall);
   
   // Устанавливаем где показывать новый пункт меню..........
   document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(e) {
   if (e.target != this) return;
   if (gContextMenu) 
      // когда не показывать
      falseItem = gContextMenu.isTextSelected || gContextMenu.onLink || gContextMenu.onImage || gContextMenu.onTextInput;
      gContextMenu.showItem("context-toggleGif", !falseItem);
   }, false);
})();


или попробуй:

Выделить код

Код:

//Всегда показывать "Перезагрузить изображение" в контекстном меню изображений
if (location == "chrome://browser/content/browser.xul") {
  eval("nsContextMenu.prototype.initViewItems = " +
    nsContextMenu.prototype.initViewItems.toString().
    replace('this.showItem("context-reloadimage", this.onImage && !this.onCompletedImage);',
            'this.showItem("context-reloadimage", this.onImage);'));
}

или попробуй:

Выделить код

Код:

// Всегда показывать "Перезагрузить изображение" в контекстном меню страницы и изображений
var reloadimage = document.getElementById("context-reloadimage");
reloadimage.setAttribute("style", "display: block !important;");

При замене кода - рестарт !

Добавлено 06-07-2012 21:25:19

skynet281978 пишет

тогда пропадает разделитель между мемори и Изменить масштаб
иначе можно?

Выделить код

Код:

memoryPanel.style.MozAppearance = "none";
memoryPanel.style.border = "0px";

на

Выделить код

Код:

memoryPanel.style.borderBottom = "none";

или

Выделить код

Код:

memoryPanel.style.borderBottom = "0px";

При замене кода - рестарт !

Отредактировано bunda1 (06-07-2012 21:26:39)

Отсутствует

 

№428906-07-2012 22:39:25

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

bunda1
memoryPanel.style.borderBottom = "none";
или
memoryPanel.style.borderBottom = "0px";

в обоих случаях получается так
40991b988275.png
мемори съезжает чуть вниз


читал что кнопки скоро перестанут работать?
мемори монитор и Изменить размер перестанут или как?

Отредактировано skynet281978 (06-07-2012 22:43:23)

Отсутствует

 

№429006-07-2012 22:47:04

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4806
UA: Firefox 3.6

Re: Custom Buttons

skynet281978
Ну тогда хорошо :) .

Выделить код

Код:

memoryPanel.style.borderBottom = "0px";
memoryPanel.style.borderTop = "0px";

читал что кнопки скоро перестанут работать?
мемори монитор и Изменить размер перестанут или как?

Нет.

Отредактировано bunda1 (06-07-2012 22:51:01)

Отсутствует

 

№429107-07-2012 00:59:46

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

bunda1 работает как нужно, спасибо.
Подскажи пожалуйста кнопку для переноса app кнопки.
Чтобы выглядела как обычная кнопка CB. Т.е. можно переносить на любую панель-место и чтобы иконку я сам мог сменить.
Кнопка оставляет стандартное меню APP кнокпки (в personal menu я потом сам рассортирую как нужно)
И пустое место от APP кнопки чтобы убиралось.
Есть такая?

Отсутствует

 

№429207-07-2012 02:04:29

init
Участник
 
Группа: Members
Зарегистрирован: 14-04-2012
Сообщений: 42
UA: Firefox 13.0

Re: Custom Buttons

Infocatcher пишет

Нет, обещают отключить поддержку используемых синтаксических конструкций, так что переписывать как раз придется все кнопки, которые это используют.

Может тогда уже проще свой xml-парсер написать?
Все равно ведь велосипед изобретать придется.

Infocatcher пишет

Лень поддерживать, надо полагать.

А что, этот функционал сегодня больше нигде не используется, что они его так легко готовы выкинуть?

Отсутствует

 

№429307-07-2012 03:17:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4337
UA: Firefox 13.0

Re: Custom Buttons

init пишет

Может тогда уже проще свой xml-парсер написать?

Парсер уже есть готовый, только это XML-парсер, а не XUL-парсер. А если в XUL каждый пробел из разметки превратить в текстовый узел, то ничего работать не будет.
Плюс для многострочных данных придется писать в духе

Выделить код

Код:

var str = "\
    а тут\
    у нас\
    несколько\
    строк";

И нету вменяемой замены для

Выделить код

Код:

var label = "Меню";
var x = <menu label={label}> ... </menu>;
init пишет

А что, этот функционал сегодня больше нигде не используется, что они его так легко готовы выкинуть?

Вроде как, из браузеров E4X реализован только в Firefox и прочих Gecko-based.
В расширениях используется, но это вряд ли решающий фактор.
«E4X is crazyland», давайте его выпилим.
Кстати, масштаб бедствия можно оценить прямо сейчас на Nightly: Add prefs to enable/disable E4X (javascript.options.xml.content and .chrome).

Кстати, в Adblock Plus тоже используется E4X:
adblockplus-2.1.2a.3522.xpi\chrome\content\ui\sendReport.js

Выделить код

Код:

let reportData =
    <report>
        <adblock-plus version={Utils.addonVersion} locale={Utils.appLocale}/>
        ...

Добавлено 07-07-2012 03:24:29
Да и кому какое дело до 90 542 пользователей Custom Buttons? :)
А тот же Adblock Plus и несколько других расширений (где в основном <![CDATA[ ... ]]> для многострочных данных) достаточно просто переписать.
Там же почти нигде не требуется создавать меню исключительно на JavaScript.

Отредактировано Infocatcher (07-07-2012 03:26:55)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№429407-07-2012 08:59:58

skynet281978
Участник
 
Группа: Members
Зарегистрирован: 09-03-2011
Сообщений: 498
UA: Firefox 13.0

Re: Custom Buttons

okkamas_knife

http://forum.mozilla-russia.org/viewtopic.php?pid=569552#p569552

эти кнопки не соответствуют тому, что я спрашивал.
они не меняют оранжевую кнопку в обычную. и тот вариант, что там предложил bunda1 тоже не подходит.
кнопки странно себя ведут. если добавить перед ними любую другую кнопку то добавляемая кнопка скрывается или перемещается правее от неё.
получается app кнопка имеет приоритет над всеми по размещению слева на панели.
а я просил, если можно, чтобы кнопка была обычная как все CB кнопки и могла перемещаться в любое место и иконку чтобы можно было задать самому.
в общем замена дополнения Toolbar Appmenu Button

bunda1
можно в кнопке Memory Monitor зарезервировать за монитором 4 цифры в строке?
получается если например сначала 80 МБ памяти, затем 150, то иконки слева от монитора сдвигаются влево.
получается эффект дёргания иконок туда-сюда, что не симпатично :)
а 4 цифры... ну, вдруг кому-то повезёт и у него за гиг перевалит память :) а так хватит до 9999 МБ :)
вот код этой кнопки с учётом доработок которые я просил ранее:

скрытый текст

Выделить код

Код:

/*Initialization Code*///Memory Monitor..................
var ucjs_MemoryMonitor = {

  _interval: 2000, //ms
  _maxMemory: 1500,
  _prefix: "MB", //B, KB, MB, GB
  _dPrefix: true,
  
  interval: null,
  init: function () {
  
    var memoryPanel = document.createElement("statusbarpanel");
    memoryPanel.id = "MemoryDisplay";
    memoryPanel.setAttribute("label", this.setPrefix(this._dPrefix));
    var urlbar = document.getElementById("urlbar-icons");
    var go = urlbar.lastChild;
    urlbar.insertBefore(memoryPanel, go)
    this.start();
    this.interval = setInterval(this.start, this._interval);
  },

  addFigure: function (str) {
    var num = new String(str).replace(/,/g, "");
    while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
    return num;
  },

  restart: function () {
    var appStartup = Components.interfaces.nsIAppStartup;
    Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(appStartup).quit(appStartup.eRestart | appStartup.eAttemptQuit);
  },

  getSize: function (mem, flag) {
    var pre = 1;
    switch (this._prefix) {
      case 'KB':
        pre = 1024;
        break;
      case 'MB':
        pre = 1024 * 1024;
        break;
      case 'GB':
        pre = 1024 * 1024 * 1024;
        break;
    }
    if (flag) return mem * pre;
    else return ucjs_MemoryMonitor.addFigure(Math.round(mem / pre));
  },

  setPrefix: function (flag) {
    return (flag) ? " " + this._prefix : "";
  },

  start: function () {
    try {
      const Cc = Components.classes;
      const Ci = Components.interfaces;
      var mgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      var e = mgr.enumerateReporters();
      var gMemReporters = {};
      while (e.hasMoreElements()) {
        var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
        gMemReporters[mr.path] = mr;
      }
      var workingSet = gMemReporters["resident"].amount;
      var commitmentSize = gMemReporters["private"].amount;
      var gfxImage = gMemReporters["gfx-surface-image"].amount;
      var restartMemory = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true);
      var memoryPanel = document.getElementById("MemoryDisplay");
      memoryPanel.setAttribute("label", ucjs_MemoryMonitor.getSize(workingSet) + ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix));
      memoryPanel.style.borderBottom = "0px";
memoryPanel.style.borderTop = "0px";
if (workingSet > restartMemory) {
        ucjs_MemoryMonitor.restart();
      }
    } catch (e) {
      clearInterval(ucjs_MemoryMonitor.interval);
    }
  }
}
//Запускаем функцию
// выходим, если функция уже выполнялась
if (!document.getElementById("MemoryDisplay")) ucjs_MemoryMonitor.init();

Отредактировано skynet281978 (07-07-2012 09:54:20)

Отсутствует

 

№429507-07-2012 11:29:27

init
Участник
 
Группа: Members
Зарегистрирован: 14-04-2012
Сообщений: 42
UA: Firefox 13.0

Re: Custom Buttons

Infocatcher пишет

Парсер уже есть готовый, только это XML-парсер, а не XUL-парсер. А если в XUL каждый пробел из разметки превратить в текстовый узел, то ничего работать не будет.

Значит придется научить его парсить xul. Только вот как он определять будет, когда нужно парсить xml, а когда xul. Мда...

Infocatcher пишет

Вроде как, из браузеров E4X реализован только в Firefox и прочих Gecko-based.
В расширениях используется, но это вряд ли решающий фактор.
«E4X is crazyland», давайте его выпилим.
Кстати, масштаб бедствия можно оценить прямо сейчас на Nightly: Add prefs to enable/disable E4X (javascript.options.xml.content and .chrome).

Копец. :( Они там чо совсем что-ли ?
В любом случае если делать костыль, он должен быть глобальным, как минимум на уровне расширения.

Отсутствует

 

№429607-07-2012 12:07:09

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

Anton пишет

Букмарклеты надо загружать так:

Выделить код

Код:

loadURI ("javascript:var list=document.getElementsByClassName('box');for (var i=0;i<list.length;i++){o=list[i].parentNode.childNodes[1].style;o.display=(o.display=='none')?'block':'none'};void(0);");

вот этот (Google Images from Site) >

Выделить код

Код:

javascript:void((function(){var%20a=location.href. replace(/^http%5C:%5C/%5C/(.*)$/,"$1");location.href="http://images.google.com/images?hl=en&q="+escape(a);})())

в такой обёртке не работает :rolleyes:  :)

Отсутствует

 

№429707-07-2012 14:41:17

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 14.0

Re: Custom Buttons

init пишет

Только вот как он определять будет, когда нужно парсить xml, а когда xul.

По неймспейсу корневого узла, как же еще. А если не нужны пустые текстовые ноды между узлами, то можно и то, и другое парсить одинаково (с удалением этих нод).

init пишет

Значит придется научить его парсить xul.

Уже.
Осталось только придумать, как распарсить строку из кода, как это делает E4X, а не из ресурса.

Отсутствует

 

№429807-07-2012 15:27:38

Alfina
Участник
 
Группа: Members
Зарегистрирован: 23-05-2010
Сообщений: 87
UA: Aurora 15.0

Re: Custom Buttons

Крошка Ру пишет

вот этот (Google Images from Site) в такой обёртке не работает

А вы не пробовали букмарклет для ImageShack? Тоже ищет картинки на сайте, плюс возможность загрузить нужную картинку на ImageShack.
Делюсь кодом готовой кнопки:

скрытый текст

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0424%u043E%u0442%u043E-%u0445%u043E%u0441%u0442%u0438%u043D%u0433%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByUlEQVQ4jY3SP2jbQBQG8ANj8PjGmwpnTIm6CdSTDrpEtQkE/wFDhmRzTelgMpTioQRvmYwgUEIHk7Xd5MHgpWAtgXrI4KGgbs7QwUMGjRq/DiddbJmECD7QcO+n9+6Jsa1HStn0PO/C87xJp11Hp12H67pXSqmTTruOs1MbR0dv4brulZSyaYre+zWcndoYnFu4+MqxiASSBwvJg4VFJBAMCfOJQDjrY7EM8PGDQrdFkFI2mSNK2EwJ6ZKQ3urg71b+EW6+K3Q/DxDeJwjvEwy+XWJwbqHbIjBHlBCPdWE8JvOOlQbiGYft2VANBduzTYhzXA4tsDevSghHhM3PLL8I6SoDsviOAHFukgPziXgE4rEGkogjiTjwhxvgy4ku8nvH8HvHUA0F3xEaYIyxaqWMHy2O370MmmoovePY3BLmY0L/0ILvCJNwpM+YFVYrZQQNgfAd7UHrSH8tGOpuwpEedTMlbP8GrFopo39o4cahHWg9FVhHAvGMI55xU7wHFJHrg0doPdFQsrL1ypeFEYpI0BC4PiCTnTvKNpXePQEYxOE7yHZH+daeBHIkH6WI5HkWKHYS1PhOXgTkyCf79R4Q1J65g5ci/wGCBZ1O+CsrsgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BgetBrowser%20%28%29.%20loadURI%20%28atob%20%28%22amF2YXNjcmlwdDp0PScnO2Zvcih2YXIlMjBuPTA7bjxkb2N1bWVudC5pbWFnZXMubGVuZ3RoO24rKyl7dCs9JzxhJTIwaHJlZj0vJTIwb25jbGljaz1cJ2RvY3VtZW50LmYudXJsLnZhbHVlPWRvY3VtZW50LmltYWdlc1snK24rJ10uc3JjO2RvY3VtZW50LmYuc3VibWl0KCk7cmV0dXJuJTIwZmFsc2U7XCc+PGltZyUyMGJvcmRlcj0wJTIwc3JjPScrZG9jdW1lbnQuaW1hZ2VzW25dLnNyYysnPjwvYT4lMjAnfTtpZih0IT0nJyl7ZG9jdW1lbnQud3JpdGUoJzxodG1sPjxoZWFkPjx0aXRsZT5JbWFnZVNoYWNrJUMyJUFFPC90aXRsZT48bGluayUyMHJlbD1zdHlsZXNoZWV0JTIwaHJlZj1odHRwOi8vaW1hZ2VzaGFjay51cy9pbWcvc3R5bGUtZGVmLmNzcyUyMHR5cGU9dGV4dC9jc3M+PC9oZWFkPjxib2R5JTIwYmdjb2xvcj0jRjdGN0Y3Pjx0YWJsZSUyMGJvcmRlcj0xJTIwY2VsbHBhZGRpbmc9NSUyMGNlbGxzcGFjaW5nPTAlMjBjbGFzcz10YWJsZV9kZWNvcmF0aW9uJTIwYWxpZ249Y2VudGVyJTIwd2lkdGg9NzYwPjx0cj48dGQ+PGlmcmFtZSUyMHNyYz1odHRwOi8vaW1hZ2VzaGFjay51cy9hZHNmcmFtZTIucGhwJTIwc2Nyb2xsaW5nPW5vJTIwYWxsb3d0cmFuc3BhcmVuY3k9dHJ1ZSUyMGZyYW1lYm9yZGVyPTAlMjB3aWR0aD03MDAlMjBoZWlnaHQ9MzAwPjxhJTIwaHJlZj1odHRwOi8vd3d3LmdldGZpcmVmb3guY29tPkdldCUyMEZpcmVGb3ghPC9hPjwvaWZyYW1lPjxwPkltYWdlU2hhY2slMjBoYXMlMjBmb3VuZCUyMHRoZSUyMGZvbGxvd2luZyUyMGltYWdlcyUyMG9uJTIwdGhpcyUyMHBhZ2UuPC9wPjxwPkNsaWNrJTIwb24lMjBhbnklMjBpbWFnZSUyMHRvJTIwaG9zdCUyMGl0JTIwb24lMjBJbWFnZVNoYWNrLCUyMG9yJTIwcHJlc3MlMjB0aGUlMjBiYWNrJTIwYnV0dG9uJTIwdG8lMjByZXR1cm4lMjB0byUyMHRoZSUyMHByZXZpb3VzJTIwcGFnZS48L3A+PGZvcm0lMjBuYW1lPWYlMjBhY3Rpb249aHR0cDovL2ltYWdlc2hhY2sudXMvdHJhbnNsb2FkLnBocCUyMG1ldGhvZD1wb3N0PjxpbnB1dCUyMHR5cGU9aGlkZGVuJTIwbmFtZT11cmw+PC9mb3JtPicrdCsnPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4nKTt2b2lkKGRvY3VtZW50LmNsb3NlKCkpfWVsc2V7YWxlcnQoJ1RoZXJlJTIwYXJlJTIwbm8lMjBpbWFnZXMlMjB0byUyMGhvc3QlMjBvbiUyMHRoaXMlMjBwYWdlLicpfQ%3D%3D%22%29%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


А вот сам скрипт:
скрытый текст

Выделить код

Код:

javascript:t='';for(var%20n=0;n<document.images.length;n++){t+='<a%20href=/%20onclick=\'document.f.url.value=document.images['+n+'].src;document.f.submit();return%20false;\'><img%20border=0%20src='+document.images[n].src+'></a>%20'};if(t!=''){document.write('<html><head><title>ImageShack%C2%AE</title><link%20rel=stylesheet%20href=http://imageshack.us/img/style-def.css%20type=text/css></head><body%20bgcolor=#F7F7F7><table%20border=1%20cellpadding=5%20cellspacing=0%20class=table_decoration%20align=center%20width=760><tr><td><iframe%20src=http://imageshack.us/adsframe2.php%20scrolling=no%20allowtransparency=true%20frameborder=0%20width=700%20height=300><a%20href=http://www.getfirefox.com>Get%20FireFox!</a></iframe><p>ImageShack%20has%20found%20the%20following%20images%20on%20this%20page.</p><p>Click%20on%20any%20image%20to%20host%20it%20on%20ImageShack,%20or%20press%20the%20back%20button%20to%20return%20to%20the%20previous%20page.</p><form%20name=f%20action=http://imageshack.us/transload.php%20method=post><input%20type=hidden%20name=url></form>'+t+'</td></tr></table></body></html>');void(document.close())}else{alert('There%20are%20no%20images%20to%20host%20on%20this%20page.')}

Отсутствует

 

№429907-07-2012 15:41:11

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8716
UA: Firefox 16.0

Re: Custom Buttons

А вы не пробовали букмарклет для ImageShack? Тоже ищет картинки на сайте, плюс возможность загрузить нужную картинку на ImageShack.

Alfina ,Сейчас попробую :)

Добавлено 07-07-2012 15:47:04
Спасибо, вариант интересный :angel: .... если бы ещё открывалось в новом табе и можно было поменять хостинг изображений :sick:

Отредактировано Крошка Ру (07-07-2012 15:47:04)

Отсутствует

 

№430007-07-2012 15:56:36

Alfina
Участник
 
Группа: Members
Зарегистрирован: 23-05-2010
Сообщений: 87
UA: Aurora 15.0

Re: Custom Buttons

Крошка Ру пишет

Спасибо, вариант интересный

Пожалуйста!

Крошка Ру пишет

если бы ещё открывалось в новом табе и можно было поменять хостинг изображений

Ну, это уже вопрос к знатокам яваскрипт. :)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]