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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№747603-02-2014 23:50:50

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

Re: Custom Buttons


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

Отсутствует

 

№747703-02-2014 23:59:36

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

Re: Custom Buttons

Infocatcher
Спасибо буду разбираться.

Отсутствует

 

№747804-02-2014 19:50:44

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 118
UA: Firefox 26.0

Re: Custom Buttons

Как сделать, чтобы расширение (джетпак) при запуске браузера было отключено и включалось через N секунд после запуска?

Отсутствует

 

№747905-02-2014 21:11:59

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 118
UA: Firefox 26.0

Re: Custom Buttons

Мне кто нибудь ответит?

Отсутствует

 

№748005-02-2014 21:39:42

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

Re: Custom Buttons

beggrr пишет

Как сделать, чтобы расширение (джетпак) при запуске браузера было отключено и включалось через N секунд после запуска?

Вот пример:

Выделить код

Код:

const addonId = "privateTab@infocatcher";
const delay = 5000;

setTimeout(function enableOnStartup() {
    if(!hasOtherWindows())
        setAddon(true);
}, delay);

addEventListener("unload", function disableOnShutdown() {
    removeEventListener("unload", disableOnShutdown, false);
    if(!hasOtherWindows())
        setAddon(false);
}, false);

function hasOtherWindows() {
    var ws = Services.wm.getEnumerator("navigator:browser");
    while(ws.hasMoreElements())
        if(ws.getNext() != window)
            return true;
    return false;
}
function setAddon(enabled) {
    AddonManager.getAddonByID(addonId, function(addon) {
        if(addon)
            addon.userDisabled = !enabled;
    });
}

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

Отсутствует

 

№748105-02-2014 23:56:26

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 118
UA: Firefox 26.0

Re: Custom Buttons

Infocatcher пишет

Вот пример:

Все получилось!
Спасибо!

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

Отредактировано beggrr (06-02-2014 00:21:11)

Отсутствует

 

№748206-02-2014 00:27:09

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

Re: Custom Buttons

(удалять уже написанное лень)

beggrr пишет

вставил в инициализацию уже существующей кнопки

Может мешать уже существующий код.
Можно попробовать обернуть в

Выделить код

Код:

(function() {
// Тут весь код
})();

Или выставлена слишком маленькая задержка.


beggrr пишет

Потому что само оно не отключается, а если оставить включенным, то при следующем запуске браузера расширение загружается сразу, без задержки.

У меня отключается само.


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

Отсутствует

 

№748306-02-2014 00:55:18

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 118
UA: Firefox 26.0

Re: Custom Buttons

Создал отдельную кнопку. Задержка установлена 10 с. Обернул в анонимную функцию.

И все равно получается: если отключить через менеджер дополнений, то при следующем запуске расширение загружается как и положено, с задержкой. Но если перезапустить браузер еще раз (не отключая расширение в менеджере) — то задержки уже нет.

Отсутствует

 

№748406-02-2014 13:21:36

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

Re: Custom Buttons

beggrr
Странно, я только вижу проблемы с включением, если перезапустить с несколькими открытыми окнами, с этим можно сделать вот так:

Выделить код

Код:

const addonId = "privateTab@infocatcher";
const delay = 5000;

setTimeout(function enableOnStartup() {
    //if(!hasOtherWindows())
    setAddon(true);
}, delay);

addEventListener("unload", function disableOnShutdown() {
    removeEventListener("unload", disableOnShutdown, false);
    if(!hasOtherWindows())
        setAddon(false);
}, false);

function hasOtherWindows() {
    var ws = Services.wm.getEnumerator("navigator:browser");
    while(ws.hasMoreElements())
        if(ws.getNext() != window)
            return true;
    return false;
}
function setAddon(enabled) {
    AddonManager.getAddonByID(addonId, function(addon) {
        if(addon && addon.userDisabled == enabled)
            addon.userDisabled = !enabled;
    });
}

А с выключением не знаю. Если используется только одно окно, то можно вообще убрать все проверки про «hasOtherWindows()».

Добавлено 06-02-2014 13:25:51
Еще можно отслеживать оповещение о "quit-application-granted", но оно или снимется в деструкторе кнопки при закрытии окна, или создаст утечку памяти. Делается примерно так, но из Custom Buttons это неудобно:

Выделить код

Код:

function observer() {
    // ...
}
Services.obs.addObserver(observer, "quit-application-granted", false);
addDestructor(function(reason) {
    if(reason == "update" || reason == "delete")
        Services.obs.removeObserver(observer, "quit-application-granted");
});

Отредактировано Infocatcher (06-02-2014 13:25:51)


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

Отсутствует

 

№748506-02-2014 19:44:23

beggrr
Участник
 
Группа: Members
Зарегистрирован: 04-02-2014
Сообщений: 118
UA: Firefox 26.0

Re: Custom Buttons

Infocatcher
Спасибо, буду пробовать

Отсутствует

 

№748608-02-2014 14:28:01

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 20.0

Re: Custom Buttons

okkamas_knife пишет:

    кто мешает создать панель набить её кнопками и потом другой кнопкой просто скрывать-показывать эту панель?

У меня наивный вопрос: а как создать панель, у меня не выходит.
Я кликаю по любой существующей панели — Настроить — Добавить панель — вписываю имя панели (abcd) — ОК — Готово.
Диалог закрывается, где мне искать созданную панель? Панели нигде нет.

Отсутствует

 

№748708-02-2014 14:36:08

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 30.0

Re: Custom Buttons

hartumov пишет

У меня наивный вопрос: а как создать панель, у меня не выходит.
Я кликаю по любой существующей панели — Настроить — Добавить панель — вписываю имя панели (abcd) — ОК — Готово.
Диалог закрывается, где мне искать созданную панель? Панели нигде нет.

Перед тем как нажать ОК добавь на панель любую кнопку, или хотя бы разделитель.

Отсутствует

 

№748808-02-2014 14:59:20

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 20.0

Re: Custom Buttons

Панель есть! :D
А как теперь сделать это?

другой кнопкой просто скрывать-показывать эту панель?

Отсутствует

 

№748909-02-2014 13:42:07

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Seamonkey 2.27

Re: Custom Buttons

Есть такой код:

SearchOnEngineChangeForFx3.uc.js автор Alice0775

Выделить код

Код:

// ==UserScript==
// @name SearchOnEngineChangeForFx3.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description
// @include main
// @compatibility Firefox 17.0+
// @author Alice0775
// @version 2013/05/19 00:00 Bug 831008 Disable Mutation Events in chrome/XUL
// @version 2013/05/18 23:20 Bug 738818
// @version 2008/06/24 19:20 修正した
// @Note
// ==/UserScript==
// @version 2008/06/24 18:50 browser.search.openintabがtrueの時2重にタブが開くbug
// @version 2008/06/23 02:00 キーボード選択時も
// @version 2008/06/23 01:50 なんか非互換まくりだったので, 作り直し
// @version 2008/06/22 22:00
var searchOnEngineChange = {
  // -- config --
  KeepDefaultEngine: true, //Чтобы вернуться к поисковой системе по умолчанию
  ClearWordAfterSearch: true, //Очистить поле поиска после поиска
  // -- config --
  searchBar: null,
  popup: null,

  init: function(){
    this.searchBar = document.getElementById("searchbar");
    if(!this.searchBar)return;
    this.popup = document.getAnonymousElementByAttribute(this.searchBar, "anonid", "searchbar-popup");
    this.popup.addEventListener("command", this, false);

    window.addEventListener("aftercustomization", this, false);
  },

  handleEvent: function(event){
   switch (event.type) {
      case "unload":
        this.popup.removeEventListener("command", this, true);
        window.removeEventListener("aftercustomization", this, false);
        break;
      case "aftercustomization":
        this.init();
        break;
      case "command":
        this.doSearch(event);
        break;
    }
  },

  clearWord: function(){
    this.searchBar.value = "";
    this.searchBar.updateDisplay();
  },

  where: function(aEvent){
    var where = "current";
    if (aEvent && aEvent.originalTarget.getAttribute("anonid") == "search-go-button") {
      if (aEvent.button == 2)
        return;
      where = whereToOpenLink(aEvent, false, true);
    }
    else {
      var newTabPref = this.searchBar._textbox._prefBranch.getBoolPref("browser.search.openintab");
      if ((aEvent && aEvent.altKey) ^ newTabPref)
        where = "tab";
    }
    return where;
  },

  doSearch: function(event){
    var target = event.target;
    var aEngine = target.engine;
    if (!aEngine)
      return;
    var aData = this.searchBar._textbox.value;
    if (!aData)
      return;
    var ss = Cc['@mozilla.org/browser/search-service;1'].getService(Ci.nsIBrowserSearchService);
    var aWhere = this.where(event);


    var submission = aEngine.getSubmission(aData, null);
    openUILinkIn(submission.uri.spec, aWhere, null, submission.postData);
    if (this.ClearWordAfterSearch){
      this.clearWord();
    }
    if (this.KeepDefaultEngine){
      let defaultPrefB = Services.prefs.getDefaultBranch("browser.search.");
      let nsIPLS = Ci.nsIPrefLocalizedString;
      let defaultEngine =ss.defaultEngine;
      try {
        defaultEngineName = defaultPrefB.getComplexValue("defaultenginename", nsIPLS).data;
        defaultEngine = ss.getEngineByName(defaultEngineName);
      } catch (ex) {}
      setTimeout(function(){ss.currentEngine = defaultEngine;},100);
    }
  }
};
searchOnEngineChange.init();
window.addEventListener('unload', searchOnEngineChange, false);


, после выбора поисковика производит поиск по введенному в поле поиска с последующим удалением введенного и открытием результата поиска в новой вкладке.
Есть такой код:
searchbar autosearch автор Morat

Выделить код

Код:

// @author Morat
 if (BrowserSearch.searchBar) {
      if (!("engineObserver" in this)) {
        this.engineObserver = function (subject, topic, data) {
          if (data == "engine-current" && BrowserSearch.searchBar.value) {
            BrowserSearch.searchBar.handleSearchCommand();
          }
        };
        Services.obs.addObserver(this.engineObserver, "browser-search-engine-modified", false);
        this.onDestroy = function () {
          Services.obs.removeObserver(this.engineObserver, "browser-search-engine-modified");
          delete this.engineObserver;
          delete this.onDestroy;
        };
      } else {
        this.onDestroy();
      }
    }


, после выбора поисковика производит поиск по введенному в поле поиска и открытием результата поиска в новой вкладке
Кто может сделать "после выбора поисковика производит поиск по введенному в адресной строке текущей активной вкладки и открытием результата поиска в новой вкладке"

Отредактировано lokiju (09-02-2014 13:45:24)

Отсутствует

 

№749010-02-2014 01:07:45

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

Re: Custom Buttons

lokiju

Выделить код

Код:

function getEngineModified(subject, topic, data) {
   if ( data == "engine-current" && gURLBar.value !== '' ) {
        var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); 
        var submission = ss.currentEngine.getSubmission( gURLBar.value, null );
        gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, true, false );
        }
};
Services.obs.addObserver( getEngineModified, "browser-search-engine-modified", false ); 
addDestructor(function() { Services.obs.removeObserver( getEngineModified, "browser-search-engine-modified", false ) });

Отсутствует

 

№749110-02-2014 02:14:50

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 25.0

Re: Custom Buttons

Как прицепить обработчик onclick на значок менеджера индикатор загрузок #downloads-button?
Дело в том, что если была загрузка, то на месте этого значка - индикатор загрузок #downloads-indicator
Мне надо обработчик onclick и на одном, и на другом.

Отсутствует

 

№749210-02-2014 02:39:30

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

Отсутствует

 

№749310-02-2014 03:07:51

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Seamonkey 2.27

Re: Custom Buttons

bunda1, спасибо.

Отсутствует

 

№749410-02-2014 16:07:16

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 25.0

Re: Custom Buttons

Я взял код той кнопки, упростил для себя и вот что у меня получилось:

Выделить код

Код:

addEventListener("mousedown", function f(e) { 

   if ( e.button !== 2 ) return;
   if ( e.target.id == "downloads-button"||e.target.id == "downloads-indicator") {                    
         // My action ........................
       }
}, true );

Вроде работает.
Нормальный код, или что то в нем не так?

Отсутствует

 

№749510-02-2014 20:04:17

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

Re: Custom Buttons

hartumov
Наверно лучше так:

Выделить код

Код:

addEventListener("mousedown", function(e) { 

   if ( e.button !== 2 ) return;
   if ( e.target.id && ["downloads-button", "downloadsPanel", "downloads-indicator"].indexOf( e.target.id ) != -1 ) {                    
        // My action ........................
        }
}, true );

Отсутствует

 

№749610-02-2014 21:06:27

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 20.0

Re: Custom Buttons

bunda1
Еще один вопросик: ведь обычно EventListener добавляют так

Выделить код

Код:

elem.addEventListener (eventName, function, useCapture)

или иногда

Выделить код

Код:

addEventListener (eventName, function, useCapture, elem)

А где в нашем случае указывается, элемент, к которому мы добавляем листенер?

Отредактировано hartumov (10-02-2014 21:10:34)

Отсутствует

 

№749710-02-2014 21:22:01

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

Re: Custom Buttons

hartumov
Наверно если не указать элемент addEventListener будет следить за window то есть за окном браузера.

Отсутствует

 

№749810-02-2014 21:54:06

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 20.0

Re: Custom Buttons

bunda1, okkamas_knife

Спасибо!

Отсутствует

 

№749911-02-2014 07:50:38

2k1dmg
Участник
 
Группа: Members
Зарегистрирован: 06-04-2011
Сообщений: 190
UA: Firefox 27.0

Re: Custom Buttons

okkamas_knife

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

Выделить код

Код:

'use strict';

var restartItem = {
    init: function() {
        var localeRestart;
        try {
            var strings = Components.classes['@mozilla.org/intl/stringbundle;1']
                .createInstance(Components.interfaces.nsIStringBundleService);
            var quitBundle = strings.createBundle('chrome://browser/locale/preferences/preferences.properties');
            localeRestart = quitBundle.GetStringFromName('shouldRestartTitle').replace(/( +)\%S/, '');
        }
        catch (e) {}

        var getBrowserUILocale = function() {
            if (!gPrefService.getBoolPref('intl.locale.matchOS')) {
                try {
                    var locale = gPrefService.getCharPref('general.useragent.locale');
                    if (locale.substr(0, 9) == 'chrome://') {
                        return gPrefService.getComplexValue('general.useragent.locale',
                            Components.interfaces.nsIPrefLocalizedString).data;
                    }
                    return locale;
                } catch (ex) {}
            }
            try {
                return Components.classes['@mozilla.org/chrome/chrome-registry;1']
                .getService(Components.interfaces.nsIXULChromeRegistry)
                .getSelectedLocale('global');
            }
            catch (ex) {
                return 'en-US';
            }
        }
        if (!localeRestart) {
            try {
                var strings = Components.classes['@mozilla.org/intl/stringbundle;1']
                    .createInstance(Components.interfaces.nsIStringBundleService);
                var quitBundle = strings.createBundle('chrome://browser/locale/browser.properties');
                localeRestart = quitBundle.GetStringFromName('safeModeRestartButton');
            }
            catch (e) {
                var appLocale = ''; // ru, en
                if (!appLocale)
                    appLocale = getBrowserUILocale().match(/^[a-z]*/)[0];
                if (appLocale == 'ru')
                    localeRestart = 'Перезапуск';
                else
                    localeRestart = 'Restart';
            }
        }

        var imageIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALNJREFUeNpiYMAPBIBYAZfk////sYo7APF6kDwaXg+Vw2tAPxaN6LgflwHImu8DcQLURgco+z66IcgGOCBJzof6HVt4zEdS54BswHokmwUIBCrMJeuRDYCZasFAGCTA1IMMYEKLprdEGPAAmQMy4AMDBQDdAGEi9GBNWLBA9IbSJAeiJlpiQdYgQEw02mExoAGJD2Ib4EtI6MlVAIsYLLX2E8pMDHgMICo3MuDwAlYDAAIMAFQCdq6IkR49AAAAAElFTkSuQmCC';

        if (!document.getElementById('appmenuRestart_Firefox')) {
            var menuitem = document.createElement('menuitem');
            menuitem.setAttribute('id', 'appmenuRestart_Firefox');
            menuitem.setAttribute('class', 'menuitem-iconic');
            menuitem.setAttribute('image', imageIcon);
            menuitem.setAttribute('label', localeRestart);
            menuitem.setAttribute('oncommand', 'Application.restart();');
            try {
                var appMenuItem = document.getElementById('appmenu-quit');
                appMenuItem.parentNode.insertBefore(menuitem, appMenuItem);
            }
            catch (ex) {}
        }

        if (!document.getElementById('menuRestart_Firefox')) {
            var menuitem = document.createElement('menuitem');
            menuitem.setAttribute('id', 'menuRestart_Firefox');
            menuitem.setAttribute('class', 'menuitem-iconic');
            menuitem.setAttribute('image', imageIcon);
            menuitem.setAttribute('label', localeRestart);
            menuitem.setAttribute('oncommand', 'Application.restart()');
            try {
                var MenuItem = document.getElementById('menu_FileQuitItem');
                MenuItem.parentNode.insertBefore(menuitem, MenuItem);
            }
            catch (ex) {}
        }
    },
    uninit: function() {
    },
    destroy: function() {
        var am = document.getElementById('appmenuRestart_Firefox');
        if (am)
            am.parentNode.removeChild(am);
        var m = document.getElementById('menuRestart_Firefox');
        if (m)
            m.parentNode.removeChild(m);
        restartItem = null;
    },
    destructor: function(reason) {
        this.destroy();
    }
};
restartItem.init();
if (typeof addDestructor == 'function' &&  // userChromeJS/uc
    addDestructor != ('addDestructor' in window && window.addDestructor)) {
    let _this = restartItem;
    addDestructor(_this.destructor, _this);
}

Отсутствует

 

№750012-02-2014 22:29:48

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

Re: Custom Buttons

Как сделать что бы код который увеличивает изображения из контекстного меню изображений брал первым делом изображения из кеша и загружал из сервера только в случае отсутствия в кеше. Проблема в том что код обычно берёт изображения из кеша а на некоторых сайтах( http://kinozal.tv/ ) загружает из сервера который бывает отдаёт другую изображение?

Выделить код

Код:

// Увеличивать размеры изображений из контекстного меню на странице, от 12.02.2014. ................................
(function z() {
   var imgZoom = 170;    // на сколько увеличить изображение из меню
   var scrollZoom = 20;  // на сколько увеличивать/уменьшать колесиком мыши
   var scrollTop = 1;    // или -1, переключение направление прокрутки для увеличение колёсиком

   // добавить новый пункт в меню изображений
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var menuitem = contextMenu.appendChild(document.createElement("menuitem")); // как последний пункт меню
   menuitem.setAttribute("label", "Увеличить размер");
   addDestructor(function() contextMenu.removeChild(menuitem));
   
   addEventListener("popupshowing", function(e) { 
      menuitem.hidden = !gContextMenu.onImage; // скрывать если не контекстное меню изображений   
 
      // получить координаты и размеры элемента над которым открылось контекстное меню
      z.targRect = e.target.triggerNode.getBoundingClientRect();  
      z.rect = { left: z.targRect.left, top: z.targRect.top, width: z.targRect.width, height: z.targRect.height };

   }, true, contextMenu);

   // если клик или команда на пункте меню
   menuitem.setAttribute("oncommand", "this.run(event);");
   menuitem.run = function(e) {
      var img = gContextMenu.target; // получить изображение  

      // создать всплывающую подсказку с увеличенным изображением .... 
      var tooltip = gBrowser.appendChild( document.createElement("tooltip") );
      tooltip.setAttribute("onpopuphiding", "event.preventDefault();");
      tooltip.style.cssText = "margin-left: -3px; margin-top: -3px; -moz-appearance: none !important; border: none; background: transparent; max-width: none";
      var image = tooltip.appendChild( document.createElement("image") );
      var w = z.rect.width, h = z.rect.height;
      image.style.width = w + imgZoom + "px", image.style.height = h * (1 + imgZoom / w) + "px";
      image.setAttribute("src", gContextMenu.imageURL || gContextMenu.mediaURL );
       
      // открыть всплывающую подсказку над изображением ....
      try { var toRect = !img.offsetParent } catch(e) { var toRect = false };
      toRect      
      ? tooltip.openPopup( gBrowser, "none", z.rect.left, z.rect.top, false, false, null ) 
      : tooltip.showPopup( img, -1, -1, "popup", "topleft", "none");
      
      // прокрутка на подсказке меняет размеры изображения, на странице закрывает его .... 
      function imageZoom(e) {
         if ( e && e.target != image ) { removeTooltip(); return; }
         var zoom = (e.detail < 0 ? scrollZoom : -scrollZoom) * scrollTop; 
         var h = image.clientHeight, w = image.clientWidth;
         image.style.width = w + zoom + "px";
         image.style.height = h * (1 + zoom / w) + "px";
      }
      gBrowser.addEventListener('DOMMouseScroll', imageZoom, true);
      
      // удалить подсказку и обработчики ....
      function removeTooltip() {
         try { gBrowser.removeChild( tooltip ) } catch(e) {};
         gBrowser.removeEventListener("click", removeTooltip, true);
         gBrowser.removeEventListener("DOMMouseScroll", imageZoom, true);
      } 
      gBrowser.addEventListener("click", removeTooltip, true);  // удалить по клику на странице         
   }   
})();

Добавлено 12-02-2014 22:51:58
Вроде так можно проверить наличие изображения в кеше:

Выделить код

Код:

var uri = img.currentURI;
      var tools = Components.classes["@mozilla.org/image/tools;1"].getService(Components.interfaces.imgITools);
      var cache = "getImgCacheForDocument" in tools // Gecko 18
          ? tools.getImgCacheForDocument(img.ownerDocument)
          : Components.classes["@mozilla.org/image/cache;1"].getService(Components.interfaces.imgICache);
                
      alert( cache.findEntryProperties(uri) );

Но что делать дальше?

Отредактировано bunda1 (12-02-2014 22:55:43)

Отсутствует

 

Board footer

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