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

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

№125-03-2016 14:47:15

superboy
Участник
 
Группа: Members
Зарегистрирован: 25-03-2016
Сообщений: 3
UA: Firefox 45.0

about:permissions в 45 и выше! Permissions Manager

/Сори если баян!


Но... вообще кому ни будь понятно вообще почему убрали столь удобную и полезную штуку?


Я понимаю что в мозилле неладное творится давно... но кому могла помешать эта фича, она наверняка даже с 6й версии толком доработок не требовала, лишние руки на нее не нужны, есть и хорошо, нечасто но нужна. Это полезная гиковская фича, к слову которой по моему нет в других браузерах.. А в мозилле думают видимо что чем сильнее они будут похожи на других.. тем лучше.:sick:

Там в "Найтли" случаем about:config не убрали? Им я пользуюсь даже реже, чем пользовался Perm.m.

--
Можно ли вылечить, ни кто не в курсе может там аддончик есть который фичу восстанавливает?

сейчас сижу на Waterfox 44 с профилем от FF. Но в целом я всегда был рад пользоваться именно оригинальным ФФ. тем боле что 45я версия даже удостоилась ESR я этого вообще не могу понять и принять...

Отсутствует

 

№225-03-2016 17:17:30

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

Re: about:permissions в 45 и выше! Permissions Manager

https://bugzilla.mozilla.org/show_bug.cgi?id=933917
В общем, как обычно, из интерфейса не открыть... Может, сначала замену реализуем? Может. А, ну вот тут теперь во всплывашке у адреса есть, но для фреймов не работает. А и ладно, чик-чик.


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

Отсутствует

 

№325-03-2016 17:21:46

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 14014
UA: Firefox 45.0
Веб-сайт

Re: about:permissions в 45 и выше! Permissions Manager

для поиска аддончиков есть тема в faq - ищу расширение


Через сомнения приходим к истине. Цицерон

Отсутствует

 

№425-03-2016 17:57:59

oleg953
Участник
 
Группа: Members
Откуда: Ростов где Дон
Зарегистрирован: 07-05-2014
Сообщений: 557
UA: Firefox 36.0

Re: about:permissions в 45 и выше! Permissions Manager

таки кнопочка есть код

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

Выделить код

Код:

/*
References:
- http://mxr.mozilla.org/mozilla-central/source/toolkit/content/aboutAbout.xhtml
  or enter 'view-source:about:about' in location bar
*/


инициализация
скрытый текст

Выделить код

Код:

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

const isFx = Application.id == "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
const isSM = Application.id == "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
const isTb = Application.id == "{3550f703-e582-4d05-9a08-453d09bdfdc6}";

this.type = "menu";
this.label = this.tooltipText = "About: Pages";
var xml = '<menupopup xmlns="' + xulns + '"'
        + '           context="toolbar-context-menu"'
        + '           oncontextmenu="inspect(event);"'
        + '           onpopupshowing="populate(this);"'
        + '           oncommand="switchToTabHavingURI('
        + 'event.target.label, true);"'
        + '           onclick="middleClickHandler(event);"></menupopup>';
var menu = this.appendChild($xml(xml));

menu.populate = populate.bind();

this.image = isFx ? "chrome://browser/skin/places/query.png"
                  : isSM
                    ? "chrome://communicator/skin/bookmarks/query.png"
                    : "data:image/png;base64,\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\
bWFnZVJlYWR5ccllPAAAAS9JREFUeNqkUz1LA0EQfftxsUq0EREUGxux8o9YWVqKnT8hFpJeEOz8\
B1rZ+AvsbBNBRSJpYhE4CB7J7Zczl0bNXmDNg7e73M6beTPsyRAClqF+uVKogxTYp+2w5vreB3Q1\
HY6JO7EICsDume0UZYnxZIKv6RSn/XWMRgVuX1uSQg5E71K2907uLoJzv8RCKeT9j+q8ur01l5zv\
n2+OzrX1UJ4qMP+iRUJO8tntRXtgrabCylsD5lwLY4Pm5kZUzA6Gj5SgcmAtXCTBrEz8u2qszBxY\
B+1MCWYShABrtaHFG0MJTKJegrWVA+4/1YGU8oeDmiEugqchVg6MFdnCIdZAKQ3W6rxAk59UprK0\
Fois1U/vGOTX7Qf8A29DDATtDeIaUSfqLZsQ/Esug28BBgBGIMAJudMj8gAAAABJRU5ErkJggg==";

function populate(aNode) {
  while (aNode.lastChild)
    aNode.removeChild(aNode.lastChild);

  var protocols = [];
  var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
  for (var cid in Cc) {
    let res = cid.match(/@mozilla.org\/network\/protocol\/about;1\?what\=(.*)$/);
    if (res) {
      let aboutType = res[1];
      let contract = "@mozilla.org/network/protocol/about;1?what=" + aboutType;
      try {
        let am = Cc[contract].getService(Ci.nsIAboutModule);
        let uri = ios.newURI("about:" + aboutType, null, null);
        let flags = am.getURIFlags(uri);
        if (!(flags & Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT))
          protocols.push(aboutType);
      }
      catch (ex) {
        // getService might have thrown if the component doesn't actually
        // implement nsIAboutModule
      }
    }
  }

  var isWin = Services.appinfo.OS === "WINNT";
  if (isWin && (protocols.length >= 20)) {
    var hbox  = aNode.appendChild($xml('<hbox xmlns="' + xulns + '"></hbox>'));
    var vbox1 = hbox.appendChild($xml('<vbox xmlns="' + xulns + '"></vbox>'));
    var vbox2 = hbox.appendChild($xml('<vbox xmlns="' + xulns + '"></vbox>'));
    protocols.sort().forEach(function(aProtocol) {
      let vbox = (aProtocol < protocols[parseInt(protocols.length / 2)])
                  ? vbox1 : vbox2;
      addMenuItem(vbox, "about:" + aProtocol);
    })
  }
  else {
    protocols.sort().forEach(function(aProtocol) {
      addMenuItem(aNode, "about:" + aProtocol);
    })
  }
}

function $xml(aXML) {
  return (new DOMParser).parseFromString(aXML, "application/xml")
                        .documentElement;
}

function addMenuItem(aNode, aLabel) {
  aNode.appendChild($xml('<menuitem xmlns="' + xulns + '"' +
                         ' label="' + aLabel + '"/>'));
}

menu.inspect = function inspect(aEvent) {
  if (!"inspectDOMNode" in window)
    return;
  aEvent.preventDefault();
  inspectDOMNode(aEvent.target);
  closeMenus(aEvent.target);
}

menu.middleClickHandler = function middleClickHandler(aEvent) {
  if (isTb || aEvent.button != 1) return;
  aEvent.preventDefault();
  gBrowser.selectedTab = gBrowser.addTab(aEvent.target.label);
  closeMenus(aEvent.target);
}

//this.boxObject.lastChild.collapsed = true;

////////////////////////////////////////////////////////////////////////////
/////////////////////////// Start Button updater ///////////////////////////

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/1.1/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Original code is Button Updater for Custom Buttons extension
 *
 * The Initial Developer of the Original Code is LouCypher.
 * Portions created by the Initial Developer are Copyright (C) 2011
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 * - LouCypher: original code
 *
 * Alternatively, the contents of this file may be used under the terms of
 * the GNU General Public License Version 2 or later (the "GPL"), in which
 * case the provisions of the GPL are applicable instead of those above.
 *
 * ***** END LICENSE BLOCK ***** */

this.updater = {
  btnClick: self.onclick,
  btnType: self.type,
  btnImage: self.image,
  btnTooltip: self.tooltipText,

  baseURL: "https://loucypher.googlecode.com/svn/custombuttons/xml/",

  get updateURL() {
    return this.baseURL + encodeURIComponent(self.name.replace(/(\/|:)/g, "-"))
                        + ".xml";
  },

  openUpdateURL: function updater_openUpdateURL() {
    switchToTabHavingURI(this.updateURL);
  },

  get stdIcon() {
    var stdIcon = parseInt(self.cbStdIcon.match(/\d/));
    switch (stdIcon) {
       case 4: return "chrome://custombuttons/skin/stdicons/bbutton.png";
       case 3: return "chrome://custombuttons/skin/stdicons/gbutton.png";
       case 2: return "chrome://custombuttons/skin/stdicons/rbutton.png";
      default: return "chrome://custombuttons/skin/button.png";
    }
  },

  get bsyIcon() {
    switch (Application.id) {
      case "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}":
        if (Application.version >= "4")
          return "chrome://browser/skin/tabbrowser/connecting.png";
        else
          return "chrome://global/skin/icons/loading_16.png";

      case "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}":
        return "chrome://communicator/skin/icons/loading.gif";

      default:
        return "chrome://global/skin/icons/loading_16.png";
    }
  },

  // Check if the URI is Custom Button URI (custombutton://...)
  isValidCbURI: function updater_isValidCbURI(aURL) {
    if (!aURL) return false;
    return /^custombutton\:\/\//.test(aURL);
  },

  // Convert 'custombutton:' URI to DOM
  convertURItoDOM: function updater_convertURItoDOM(aURL) {
    if (!this.isValidCbURI(aURL)) {
      custombuttons.alertBox(self.name, "Not a Custom Buttons link!");
      return;
    }
    var string = unescape(aURL.replace(/^custombutton\:\/\//, "").toString());
    var parser = new DOMParser();
    var dom = parser.parseFromString(string, "text/xml");
    if (dom.documentElement.nodeName == "parsererror")
      return null;
    else
      return dom.documentElement;
  },

  // Get value from XML element
  getParamValue: function updater_getParamValue(aDocument, aNodeName) {
    var node = aDocument.querySelector(aNodeName);
    if (!node)
      return "";
    if (!node.firstChild || (node.firstChild &&
        (node.firstChild.nodeType == node.TEXT_NODE))) {
      return node.textContent;
    }
    else
      return node.firstChild.textContent;
  },

  // Set button parameters from XML alement
  getButtonParameters: function updater_getButtonParameters(aButtonLink, aURL) {
    var dom = this.convertURItoDOM(aURL);
    var params = custombuttons.cbService.getButtonParameters(aButtonLink)
                                        .wrappedJSObject;
    params.name             = this.getParamValue(dom, "name")
    params.date             = this.getParamValue(dom, "date") || "";
    params.image            = this.getParamValue(dom, "image") ||
                              this.getParamValue(dom, "stdicon");
    params.code             = this.getParamValue(dom, "code")
    params.initCode         = this.getParamValue(dom, "initcode")
    params.help             = this.getParamValue(dom, "help")
    params.accelkey         = this.getParamValue(dom, "accelkey")
    params.mode             = this.getParamValue(dom, "mode")
    params.wrappedJSObject  = params;
    return params;
  },

  // Reset button attribute if user click the button during update
  resetAttributes: function updater_resetAttributes() {
    self.image = this.btnImage;
    self.tooltipText = self.name;
    self.removeAttribute("busy");
    self.onclick = this.btnClick;
    self.type = this.btnType;
    self.tooltipText = this.btnTooltip;
  },

  // Check button for update
  checkForUpdate: function updater_checkForUpdate(aCallback) {
    if (!navigator.onLine) {                // If browser is in offline mode
                                            // ask to switch to online
      var online = custombuttons.confirmBox(self.name,
                             "Firefox is currently in offline mode.\n"
                           + "Switch to online mode and try again?",
                             "Yes", "No");
      if (!online) return;
      BrowserOffline.toggleOfflineStatus(); // switch to online
    }

    var url = this.updateURL + "?" + Date.now();
    var req = new XMLHttpRequest();
    req.open("GET", url, true);
    if (self.hasAttribute("busy")) {
      this.resetAttributes();
      return
    }
    var updater = this;
    req.onreadystatechange = function (aEvent) {
      self.onclick = function(aEvent) {
        aEvent.preventDefault();
        req.abort();
        self.updater.resetAttributes();
      }
      self.image = updater.bsyIcon;
      self.setAttribute("busy", "");
      self.removeAttribute("type");
      self.tooltipText = "Checking for update...\nClick to abort.";
      if (req.readyState == 4 && req.status == 200) {
        updater.resetAttributes();
        aCallback(req.responseXML);
      }
    }
    req.send(null);
  },

  // Get update from XML
  getUpdate: function updater_getUpdate(aDocument) {
    if (aDocument.documentElement.localName != "custombutton") {
      custombuttons.alertBox(self.name,
                             "Not a valid Custom Buttons XML file!");
      return;
    }

    //inspectDOMDocument(aDocument); return;
    let icon = self.updater.btnImage ? self.updater.btnImage
                                     : self.updater.stdIcon;
    let button = aDocument.getElementById("button");
    let link = button.getElementsByTagNameNS(xhtmlns, "a")[0];
    if (link.href == self.URI) {
      let as = Cc['@mozilla.org/alerts-service;1'].
               getService(Ci.nsIAlertsService);
      as.showAlertNotification(icon, "No update found!",
                               "Finish checking", false, "", null);
      return;
    } 

    var install = custombuttons.confirmBox(self.name, "Update found! " +
                                           "Update this button?",
                                           "Yes", "No");
    if (!install) return;
    let btnLink = custombuttons.makeButtonLink("update", self.id);
    let params = self.updater.getButtonParameters(btnLink, link.href);
    //inspectObject(params); return;
    custombuttons.cbService.installButton(params);
    custombuttons.alertBox(self.name, "Button updated!");
    self.setAttribute("cb-edit-state", "active");
  },

  init: function updater_onLoad() {

    var icon = this.btnImage ? this.btnImage : this.stdIcon;

    function $(aId) {
      return document.getElementById(aId);
    }

    function addMenuItem(aNewIDs, aNodeIDs, aSeparator) {
      // Remove previously created menuitems if any
      if ($(aNewIDs)) {
        if (aSeparator &&
            ($(aNewIDs).nextSibling.localName == "menuseparator")) {
          $(aNewIDs).parentNode.removeChild($(aNewIDs).nextSibling);
        }
        $(aNewIDs).parentNode.removeChild($(aNewIDs));
      }

      var mi = $xml(
                    '<menuitem xmlns="' + xulns + '"'
                  + ' id="' + aNewIDs + '"'
                  + ' class="menuitem-iconic"'
                  + ' image="' + icon + '"'
                  + ' label="Check for updates for this button"'
                  + ' onclick="if (event.button == 1) {'
                  + ' var btn = document.getElementById(\''
                  + self.id + '\'); btn.updater.openUpdateURL(); }" '
                  + ' oncommand="var btn = document.getElementById(\''
                  + self.id + '\'); btn.updater.checkForUpdate('
                  + 'btn.updater.getUpdate);"'
                  + ' observes="custombuttons-contextbroadcaster-primary"/>');
      $(aNodeIDs).parentNode.insertBefore(mi, $(aNodeIDs).nextSibling);
      if (aSeparator) {
        var sep = $xml('<menuseparator xmlns="' + xulns + '"'
                            + ' id="' + mi.id + '-separator"/>');
        mi.parentNode.insertBefore(sep, mi.nextSibling);
      }
    }

    function initUpdaterCbPopup(aEvent) {
      var popupNode = "triggerNode" in aEvent.target
                        ? aEvent.target.triggerNode : document.popupNode;
      $(kIDs).hidden = (popupNode != self);
      ($(kIDs).nextSibling.id == $(kIDs).id + "-separator") &&
      ($(kIDs).nextSibling.hidden = (popupNode != self));
    }

    var kIDs = self.id + "-checkForUpdate";
    var uIDs = "custombuttons-contextpopup-updateButton";

    // Add 'Check for Update...' menuitem to CB contextmenu
    addMenuItem(kIDs, uIDs, true);

    $(uIDs).parentNode.addEventListener("popupshowing",
                                           initUpdaterCbPopup, false);
    $(uIDs).parentNode.removeEventListener("popuphiding",
                                              initUpdaterCbPopup, false);

    self.onDestroy = function(aReason) {
      if (aReason != "delete") return;
      $(uIDs).parentNode.removeEventListener("popupshowing",
                                             initUpdaterCbPopup, false);
      $(kIDs).parentNode.removeChild($(kIDs + "-separator"));
      $(kIDs).parentNode.removeChild($(kIDs));
    }
  }
}

this.updater.init();

//////////////////////////// End Button updater ////////////////////////////
////////////////////////////////////////////////////////////////////////////

// Start backward compatibility
if ("switchToTabHavingURI" in window)
  return;

menu.switchToTabHavingURI = function switchToTabHavingURI(aURI, aOpenNew) {
  if (isTb) {
    openContentTab(aURI, "tab", "^(https?|about):");
    return;
  }

  function switchIfURIInWindow(aWindow) {
    var browsers = aWindow.gBrowser.browsers;
    for (let i = 0; i < browsers.length; i++) {
      let browser = browsers[i];
      if (browser.currentURI.equals(aURI)) {
        aWindow.focus();
        aWindow.gBrowser.tabContainer.selectedIndex = i;
        return true;
      }
    }
    return false;
  }

  if (!(aURI instanceof Ci.nsIURI)) {
    aURI = makeURI(aURI, null, null);
  }
  var isBrowserWindow = !!window.gBrowser;
  if (isBrowserWindow && switchIfURIInWindow(window)) {
    return true;
  }
  var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
           getService(Ci.nsIWindowMediator);
  var winEnum = wm.getEnumerator("navigator:browser");
  while (winEnum.hasMoreElements()) {
    let browserWin = winEnum.getNext();
    if (browserWin.closed || browserWin == window) {
      continue;
    }
    if (switchIfURIInWindow(browserWin)) {
      return true;
    }
  }
  if (aOpenNew) {
    if (isBrowserWindow && isTabEmpty(gBrowser.selectedTab)) {
      gBrowser.selectedBrowser.loadURI(aURI.spec);
      gBrowser.tabContainer.mTabstrip
                           .ensureElementIsVisible(gBrowser.selectedTab);
    }
    else
      openUILinkIn(aURI.spec, "tab");
  }
  return false;
}

function isTabEmpty(aTab) {
  var browser = aTab.linkedBrowser;
  var uri = browser.currentURI.spec;
  var body = browser.contentDocument.body;
  return browser.sessionHistory.count < 2 &&
         (uri == "about:blank") &&
         (!body || !body.hasChildNodes()) &&
         !aTab.hasAttribute("busy");
}


а в ней всё что нужно 94z9D.jpg

Отсутствует

 

№525-03-2016 18:12:06

FMRUser
Участник
 
Группа: Members
Зарегистрирован: 01-03-2014
Сообщений: 817
UA: Firefox 45.0
Веб-сайт

Re: about:permissions в 45 и выше! Permissions Manager

oleg953 пишет

таки кнопочка есть код

about:permissions "разделегировали".. :rolleyes:

Отсутствует

 

№625-03-2016 19:01:23

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 45.0

Re: about:permissions в 45 и выше! Permissions Manager

Вроде работает, но about:permissions не наблюдаю :(

Отсутствует

 

№725-03-2016 20:51:47

oleg953
Участник
 
Группа: Members
Откуда: Ростов где Дон
Зарегистрирован: 07-05-2014
Сообщений: 557
UA: Firefox 36.0

Re: about:permissions в 45 и выше! Permissions Manager

был не прав jemocii_44.gif забыл что тут 9M2tK.jpg

Отсутствует

 

№805-04-2016 14:20:34

superboy
Участник
 
Группа: Members
Зарегистрирован: 25-03-2016
Сообщений: 3
UA: Firefox 45.0

Re: about:permissions в 45 и выше! Permissions Manager

Походу это только я муки испытываю за отсутствие менеджера =(

Аддончик так и не появился, народ даже в забугре вяло и безынтересно обсуждает тему... всем по барабану, все на хроме.


У оригинальной мозиллы нет форума? Почему они форум убрали... лет 7 назад был форум

--

Менеджер очень важная штука... он всегда позволял мониторить память о каких сайтах есть в браузере, редактировать правила не заходя на сайт...

Отредактировано superboy (05-04-2016 14:22:39)

Отсутствует

 

Board footer

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