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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№1402611-01-2020 16:57:57

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Andrey_Krropotkin пишет

difabor там чуть посложней будет, чтобы получить линки в некую переменную - links, надо скорей всего формировать GET запрос страницы, получить ответ и вставить, примерно как перевод в окне.

А как это сделать?
Допустим, я хочу получить линки от https://lenta.ru/, находясь на другой странице, напр. на этой странице форума.
Что значит "вставить, примерно как перевод в окне"?

Отредактировано difabor (11-01-2020 17:08:20)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1402711-01-2020 17:50:19

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 68.0

Re: Custom Buttons

Привет всем,с прошедшими!
Для 68й есть код-кнопка,для запуска программ?И вот эту под 68ю никто не адаптировал?

Отсутствует

 

№1402811-01-2020 20:04:00

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: Custom Buttons

Andrey_Krropotkin пишет

на 72 не определяется селектор

Ну да, нету больше никаких селекторов,
всё окончательно переделали под Fission.
Теперь примерно как-то так, наверно

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

Выделить код

Код:

(popup => addEventListener("popupshowing", {
    handleEvent(e) {
        if (this.shouldHide) return;

        var menuitem = document.createXULElement("menuitem");
        menuitem.id = "content-baseItem";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("oncommand", "copyImageAsBase64()");
        menuitem.setAttribute("label", "Запомнить изображение как base64");
        menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ==");
        popup.append(menuitem);
        addDestructor(() => menuitem.remove());

        menuitem.copyImageAsBase64 = () => {
            var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal;
            if (osPid == -1) osPid = Services.appinfo.processID;
            for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) {
                var pmm = Services.ppmm.getChildAt(ind);
                if (pmm.osPid == osPid) break;
            }
            pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent(this.code()), false);
        }
        this.handleEvent = () => menuitem.hidden = this.shouldHide;
    },
    get shouldHide() {
        return !gContextMenu.onImage;
    },
    code: () => `(targetIdentifier => {

        var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm")
            .ContentDOMReference.resolve(targetIdentifier);

        var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas");
        canvas.width = image.naturalWidth;
        canvas.height = image.naturalHeight;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(image, 0, 0);
        var base64 = canvas.toDataURL();

        Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper)
            .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard);

        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
            .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64");
    })(${
        JSON.stringify(gContextMenu.targetIdentifier)
    })`
}, false, popup || 1))(document.getElementById("contentAreaContextMenu"));

Отсутствует

 

№1402911-01-2020 21:01:23

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
UA: Firefox 52.0

Re: Custom Buttons

Вопрос к знатокам.

Все в курсе, что при заходе на сайты по HTTPS браузер проверяет сертификат и показывает разные иконки 1-connection-secure.png2-connection-mixed-passive-loaded.png3-connection-mixed-active-loaded.png

Вопрос в следующем. Может кто-нибудь из знатаков набросать такой код:
Если HTTPS и сертификат действительный — alert("1").
Если HTTPS, сертификат действительный, но страница имеет смешанное содержимое — alert("2").
Если HTTPS и сайт добавлен пользователем в исключение — alert("3").
Если HTTPS и сертификат недействительный — alert("4").


«The Truth Is Out There»

Отсутствует

 

№1403012-01-2020 17:38:17

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: Custom Buttons

VORON пишет

вот эту под 68ю

Перенёс ресайз с дерева на родительский vbox,
а то что-то со скроллбаром непонятки.
То есть, resizer будет чуть пониже.

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

Выделить код

Код:

((panel, css) => addEventListener("popupshowing", {
    pref: "CB.editBMPanel_folderTreeRow_WidthHeight",
    handleEvent(e) {
        css = encodeURIComponent(css.replace(/;/g, " !important;"));
        var args = ["data:text/css," + css, windowUtils.USER_SHEET];
        windowUtils.loadSheetUsingURIString(...args);

        var row = this.row = document.getElementById("editBMPanel_folderTreeRow");
        addEventListener("popuphidden", this, false, panel);

        addDestructor(reason => {
            windowUtils.removeSheetUsingURIString(...args);
            row.removeAttribute("width");
            row.removeAttribute("height");
            reason == "delete" && Services.prefs.clearUserPref(this.pref);
        });
        this.handleEvent = e => e.target == panel && this[e.type]();
        this.popupshowing();
    },
    popupshowing() {
        var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" ");
        this.row.width = width; this.row.height = height;
        gEditItemOverlay.toggleFolderTreeVisibility();
    },
    popuphidden() {
        var {width, height} = this.row;
        Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height));
    }
}, false, panel || 1))(document.getElementById("editBookmarkPanel"), `

    #editBookmarkPanel #editBMPanel_folderTreeRow {
        resize: both;
        overflow: hidden;
        min-width: 332px;
    }

    #editBookmarkPanel box.panel-header {
        padding: 0;
        border: none;
    }
    #editBookmarkPanel #editBookmarkPanelInfoArea {
        display: none;
    }
    #editBookmarkPanel #editBookmarkPanelRows {
        padding-top: 0;
    }
    #editBookmarkPanel #editBMPanel_keywordRow,
    #editBookmarkPanel #editBMPanel_locationRow {
        visibility: visible;
    }
    #editBookmarkPanel #editBMPanel_tagsRow > hbox,
    #editBookmarkPanel #editBMPanel_folderRow > hbox,
    #editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) {
        display: flex;
        align-items: center;
    }
    #editBookmarkPanel #editBMPanel_tagsField,
    #editBookmarkPanel #editBMPanel_folderMenuList,
    #editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * {
        flex-grow: 1;
    }
    #editBookmarkPanel moz-input-box {
        width: 100%;
    }
`);

Отсутствует

 

№1403113-01-2020 11:19:24

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 68.0

Re: Custom Buttons

Dumby
Супер!
А по кнопке для запуска программы есть мысли?Вот это у меня на 54-й отлично работало,на 68-й - ноль реакции

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

Выделить код

Код:

startProcess("c:\\Program Files\\Proga\\proga.exe",[""]);
 
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);
      } else custombuttons. alertBox ("Файл не найден", path);  
};

Отсутствует

 

№1403213-01-2020 14:53:01

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
UA: Firefox 52.0

Re: Custom Buttons

VORON
Попробуй в коде кнопки заменить nsILocalFile на nsIFile.


«The Truth Is Out There»

Отсутствует

 

№1403313-01-2020 15:10:16

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 68.0

Re: Custom Buttons

unter_officer
О,вот это подарок!:beer:
А что здесь поправить чтоб заработало?

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

Выделить код

Код:

/*
    Linkification
    Original script by Misha Splurov
    http://userscripts.org/scripts/show/67744
*/

// (c) http://data.iana.org/TLD/tlds-alpha-by-domain.txt
var domains = [
  "ac", "ad", "ae", "aero", "af", "ag", "ai", "al", "am", "an", "ao", "aq",
  "ar", "arpa", "as", "asia", "at", "au", "aw", "ax", "az", "ba", "bb", "bd",
  "be", "bf", "bg", "bh", "bi", "biz", "bj", "bm", "bn", "bo", "br", "bs",
  "bt", "bv", "bw", "by", "bz", "ca", "cat", "cc", "cd", "cf", "cg", "ch",
  "ci", "ck", "cl", "cm", "cn", "co", "com", "coop", "cr", "cu", "cv", "cx",
  "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "edu", "ee", "eg",
  "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb",
  "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gov", "gp", "gq",
  "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu",
  "id", "ie", "il", "im", "in", "info", "int", "io", "iq", "ir", "is", "it",
  "je", "jm", "jo", "jobs", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp",
  "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt",
  "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mil", "mk", "ml",
  "mm", "mn", "mo", "mobi", "mp", "mq", "mr", "ms", "mt", "mu", "museum",
  "mv", "mw", "mx", "my", "mz", "na", "name", "nc", "ne", "net", "nf", "ng",
  "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "org", "pa", "pe", "pf",
  "pg", "ph", "pk", "pl", "pm", "pn", "pr", "pro", "ps", "pt", "pw", "py",
  "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg",
  "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sv",
  "sy", "sz", "tc", "td", "tel", "tf", "tg", "th", "tj", "tk", "tl", "tm",
  "tn", "to", "tp", "tr", "travel", "tt", "tv", "tw", "tz", "ua", "ug", "uk",
  "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws",
  "ye", "yt", "yu", "za", "zm", "zw"
];

// (c) http://yellow5.us/firefox/linkification/
var tagsForSkip = [
  "a", "applet", "area", "embed", "frame", "frameset", "head", "iframe",
  "img", "map", "meta", "noscript", "object", "option", "param", "script",
  "select", "style", "textarea", "title"
];

var inArray = function(value, items) {
  for (var i = 0; items[i] && value != items[i]; i++);
  return value == items[i];
}

var urlsRegExp = /(^|[\s()\[\]_:~+@*"'>])((?:https?|ftp|irc):\/\/)?([-a-z\d;:&=+$,%_.!~*'()]+@)?((?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:(www|irc|ftp)\.)?(?:(?:[a-z\d]|[a-z\d][a-z\d-]*[a-z\d])\.)+([a-z]{2,6}))(:\d+)?(\/(?:[-\w.!~*'()%:@&=+$,;\/]*[\w~*%@&=+$\/])?(?:\?(?:[-\w;\/?:@&=+$,.!~*'()%\[\]|]*[\w\/@&=+$~*%])?)?(?:#(?:[-\w;\/?:@&=+$,.!~*'()%]*[\w\/@&=+$~*%])?)?|\b)/i

var linksCounter = 0;

var current = content.document.body;
while (current) {
  if (current.nodeName == "#text" && (match = current.nodeValue.match(urlsRegExp)) && inArray(match[6], domains)) {
    var url;
    if (match[3] && ! match[2] && ! match[5] && ! match[8] && (match[3].indexOf(":") == -1 || match[3].indexOf("mailto:") == 0)) {
      url = (match[3].indexOf("mailto:") == -1 ? "mailto:" : "")
          + match[3]
          + match[4];
    }
    else {
      url = (match[2] ? match[2] : (! match[5] || match[5] == "www" ? "http" : match[5]) + "://")
          + (match[3] ? match[3] : "")
          + match[4]
          + (match[7] ? match[7] : "")
          + (match[8] ? match[8] : "");
    }
    if (url) {
      var range = content.document.createRange();
      range.setStart(current, match.index + match[1].length);
      range.setEnd(current, match.index + match[0].length);
      var a = content.document.createElement("a");
      a.setAttribute("href", url);
      a.setAttribute("target", "_blank");
      a.setAttribute("class", "linkified");
      a.appendChild(range.extractContents());
      range.insertNode(a);
      range.detach();
      linksCounter++;
    }
  }
  if (current.tagName && !inArray(current.tagName.toLowerCase(), tagsForSkip) && current.firstChild) {
    current = current.firstChild;
  }
  else if (current.nextSibling) {
    current = current.nextSibling;
  }
  else {
    do {
      current = current.parentNode;
    } while (!current.nextSibling && current.parentNode);
    current = current.nextSibling;
  }
}

/*
if (linksCounter > 0) {
  var style = content.document.createElement("style");
  style.type = "text/css";
  style.appendChild(content.document.createTextNode("a.linkified:before {content: "~"; color: #e00;}"));
  content.document.getElementsByTagName("head")[0].appendChild(style);
}
*/


Бралась тут

Отредактировано VORON (13-01-2020 15:28:11)

Отсутствует

 

№1403413-01-2020 16:59:45

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Custom Buttons

VORON пишет

Для 68й есть код-кнопка,для запуска программ?

Этот код точно работает в 68.4.1.

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.


(учесть уточнение в следующем посту там же)

Отредактировано shadow_user (13-01-2020 17:01:31)

Отсутствует

 

№1403513-01-2020 17:34:39

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: Custom Buttons

VORON пишет

А что здесь поправить

Попробуй так:

Содержимое вкладки Код перемести на вкладку Справка,
а во вкладке Код размести это

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

Выделить код

Код:

gBrowser.selectedBrowser.messageManager.loadFrameScript(this.fsURL || (
    this.fsURL = `data:,(match => {\n${encodeURIComponent(this.Help)}\n})()`
), false);

Отсутствует

 

№1403613-01-2020 18:14:35

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 68.0

Re: Custom Buttons

Dumby
Отлично!:beer:

Отсутствует

 

№1403714-01-2020 00:15:12

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

Re: Custom Buttons

А где рабочую версию Custom Buttons взять?

Отсутствует

 

№1403814-01-2020 08:07:03

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Custom Buttons

voqabuhe пишет

А где рабочую версию Custom Buttons взять?

Первый пост страницу назад.

Отсутствует

 

№1403914-01-2020 12:38:37

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 72.0

Re: Custom Buttons

difabor вот нарыл -попробуй

Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

, где вместо forum.mozilla-russia.org/index.php - любой сайт, может поможет

Отсутствует

 

№1404014-01-2020 17:38:08

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

Re: Custom Buttons

shadow_user пишет

Первый пост страницу назад.

Спасибо. Я вчера это уже увидел. Установил customcustom_buttons-0.0.7.0.0.9-fx-paxmod.xpi Только вот ни одной работающей кнопки для  [firefox] 72.0.1 не нашёл. Кто-нибудь дайте плиз любую кнопку, которая точно работает на  72.0.1.

Отсутствует

 

№1404114-01-2020 17:55:34

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1739
UA: Firefox 52.0

Re: Custom Buttons

voqabuhe пишет

Кто-нибудь дайте плиз любую кнопку, которая точно работает на  72.0.1.

Попробуйте эту: https://forum.mozilla-russia.org/viewto … 05#p772105


Win7

Отсутствует

 

№1404214-01-2020 18:21:21

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

Re: Custom Buttons

kokoss

kokoss пишет

Попробуйте эту: https://forum.mozilla-russia.org/viewto … 05#p772105

Спасибо, эта работает, а то я уж думал, что расширение как-то криво встало. )

Отсутствует

 

№1404314-01-2020 20:21:43

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

Andrey_Krropotkin пишет

difabor вот нарыл -попробуй

Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

, где вместо forum.mozilla-russia.org/index.php - любой сайт, может поможет

Спасибо, Andrey_Krropotkin, попробовал.
Но этот сайт не даёт списка линков для гугла с поисковым запросом.
Но даже если бы давал, то что бы я с этим списком делал бы? Ведь для того, чтобы увидеть этот список, надо зайти на эту страницу.
Давайте я Вам расскажу, для чего мне это надо (может и Вам сгодится, если Вы любите использовать стили) и Вам станет яснее, что мне требуется.
1. Имеется масса стилей, которые используют фоновую картинку для красоты и всякие примочки, чтобы эта картинка не мешала читать текст.
Но какая бы картинка ни была красивой, она в конце концов надоедает...
2. Я написал скрипт - симбиоз javascript и css для сайта http://mignews.com/
По сути - это небольшая пришлёпка javascriptа к css.
Эта пришлёпка содержит список урл картинок, которые я подобрал, рандомальный выбор одной из них и подсовывание её в качестве фоновой картинки.

скрипт-симбиоз

Выделить код

Код:

var image_list = ["https://vjoy.cc/wp-content/uploads/2019/10/samye-klassnye-oboi-na-telefon-4.jpg",
"https://telegraf.com.ua/files/2018/07/krasota-prirody-na-fotografiyax-15_1.jpg",
"https://vjoy.cc/wp-content/uploads/2019/10/2-7.jpg",
"https://im0-tub-ru.yandex.net/i?id=d9aa27fb6d6b230a241c002ea867afeb-l&n=13",
"https://avatars.mds.yandex.net/get-pdb/1880053/5ed75973-ac9c-4d58-9ba0-1509bcf1a2b9/s1200",
"https://images.protopage.com/wallpaper/retina/autumn-landscape.jpg",
"https://img2.akspic.ru/image/99500-priroda-vodopad-vodoem-vodotok-list-2880x1800.jpg"];
var rand = Date.now()%image_list.length;
var imgmy = image_list[rand];
var css = '#content {margin-left: 150px !important}\n'+
'.header{max-height: 88px}\n' +
'#zeroline{max-height: 86px}\n' +
'body {background: #eff;\n'+
'     background-image: url('+imgmy + ');background-size: contain}\n' +
'.photomainnew, .mm-body,#doline {background-color: #ddd !important}\n'+
'.rumainnew{background-color: #eff}\n'+
'#inside{background-color: #eee;}\n'+
'body > iframe {background-color: #eff}\n'+
'#unoline > .rumainnew {background-color: #eee !important;}\n';

let styleNode = document.createElement("style");
  styleNode.appendChild(document.createTextNode(css));
  (document.querySelector("head") || document.documentElement).appendChild(styleNode);


3. Скрипт работает и картинки подсовываются рандомально.
Но аппетит приходит во время еды. Ведь даже если картинки выбираются рандомально, они всё равно мне знакомы, ведь я же их и заготавливал.
А хочется новизны.
И мне пришла идея: а почему бы в качестве списка картинок не использовать поиск по "Beautiful landscapes" в картинках (указав определённые фильтры - большие, горизонтальная ориентация и пр)?
Я выяснил механизм как по ссылке выудить урл оригинала картинки. То есть, находясь на странице гугловского поиска я могу получить список картинок.
Мне бы хотелось получить этот список удалённо, т.е. не находясь на странице поиска.
Извините за многословие


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404414-01-2020 21:33:08

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 505
UA: unknown 0.0

Re: Custom Buttons

difabor пишет

Давайте я Вам расскажу, для чего мне это надо (

Удалено!
Замечание 3.3
Sergeys


...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation

Отсутствует

 

№1404515-01-2020 00:48:50

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Chrome 79.0
Веб-сайт

Re: Custom Buttons

mokujin пишет
difabor пишет

Давайте я Вам расскажу, для чего мне это надо (

Удалено!

А что Вас так возмутило? У каждого - свои вкусы и предпочтения. И причём здесь браузеры?
На мозилле у меня накрылись закладки. Причём - с концами: ни восстановить, ни импортировать я не могу - исчезли фолдеры верхнего уровня - Bookmarks Toolbar (Панель Закладок), Other Bookmarks (Другие Закладки) и т.д.
Полетела куча дополнений и т.п. Устанавливать мозиллу с чистого листа я не рискую пока. Поэтому я пока на Хроме.
Вот чем я порчу жизнь персонально Вам?
Вы, скажем, равнодушны к картинкам на подложке. Наверное получаете удовольствие от инфы на сайтах. На здоровье.
Я же Вам не навязываю свои вкусы.
Да, мне интересно разнообразие, привлекает новизна, в том числе и эстетическая. И что? Как это может ударить по Вам?


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1404615-01-2020 23:52:46

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Нет кода  bindigs вернуть? В 72 ...Или как иконки в menu вернуть? И вообще если что хорошее, кроме геммора в этой версии?
И еще "Ссылки клирикабельны"  как бы иконку менять ,  setAttribute  присвоить?

скрытый текст
gBrowser.selectedBrowser.messageManager.loadFrameScript(this.fsURL || (
    this.fsURL = `data:,(match => {\n${encodeURIComponent(this.Help)}\n})()`
), false);

alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
                      alertsService.showAlertNotification("chrome://global/skin/icons/cpd_OK.png", "Links", "ССылки клирикабельны" );
                      setTimeout(()=> alertsService.closeAlert(), 2000);

Отредактировано solombala (16-01-2020 14:22:39)

Отсутствует

 

№1404716-01-2020 13:06:11

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 72.0

Re: Custom Buttons

solombala, я тестил 74, так вот) там отвалиться больше...
Если нет навыков программирования, то вообще лучше не слезать с esr, или умолять чинить то или се...
У меня кроме скроллбара, еще что-то вышло из строя но так много поломанного что я уже решил забить.
Пользуюсь пока недобраузером, в плане поломок, а восстанавливать это геммор, если ток умолять а я устал темболее что игнор чую).
Ммм а тем более с 74, так там вообще половина всего вышла из строя, в том числе и стили некоторые.

Ну в вашем плане, если мало чего чинить можно наверно и попробывать. В моем та случае чинить реально много(скорее ненужного), тестил вашу сборку так там не так много что восстанавливать, так как все в основном изменено через omni.ja.

Отредактировано func4ptch4 (16-01-2020 14:19:39)

Отсутствует

 

№1404816-01-2020 14:39:00

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 73.0

Re: Custom Buttons

Dumby
Перестала работать кнопка Активизировать вкладку наведением курсора

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

Выделить код

Код:

((lst, trg) => trg && addEventListener("mouseover", lst, false, trg))({id: 0, tab: null,
handleEvent({target: tab}) {if (tab.matches("tab:not([selected])") && this.tab != tab) clearTimeout(this.id),
this.id = setTimeout(this.onTimeout, 850, this.tab = tab, tab.boxObject.screenX);},
get onTimeout() {delete this.onTimeout; return this.onTimeout = (tab, x) => {
if (tab.matches(":hover") && Math.abs(x - tab.boxObject.screenX) < 50)
gBrowser.selectedTab = tab;this.tab = null;}}}, gBrowser.tabs[0].boxObject.parentBox);


Можно ее подрихтовать?

Отсутствует

 

№1404917-01-2020 01:49:10

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Кириллица в латиницу, гор. кнопки как? Не того...

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

Выделить код

Код:

(keybUtils => {
    var btn = this;
    var listener = {
        handleEvent(e) {
            if(e.target != btn)
                return;
            e.preventDefault();
            e.stopPropagation();
            this.switch();
        },
        switch() {
            var br = document.activeElement;
            br && br.localName == "browser" && br.isRemoteBrowser
                ? br.messageManager.loadFrameScript(this.url, false)
                : this.keybUtils.switchSelKeybLayout();
        },
        get url() {
            delete this.url;
            return this.url = `data:;charset=utf-8,(${
                encodeURIComponent(keybUtils)
            }).switchSelKeybLayout()`;
        },
        get keybUtils() {
            delete this.keybUtils;
            var url = "data:;charset=utf-8,this.keybUtils = " + encodeURIComponent(keybUtils);
            Services.scriptloader.loadSubScript(url, this);
            this.keybUtils.button = btn;
            this.keybUtils.getFocusedElement = function(_subCall, _focusFixed) {
                if(
                    !_focusFixed
                    && "closeMenus" in window
                    && document.commandDispatcher.focusedElement == this.button
                ) {
                    closeMenus(this.button);
                    setTimeout(function(_this) {
                        _this.switchSelKeybLayout(_subCall, true);
                    }, 0, this);
                    return;
                }
                return document.commandDispatcher.focusedElement;
            }
            return this.keybUtils;
        }
    };
    if(btn instanceof XULElement && addEventListener.length > 3) {
        addEventListener("command", listener, true, this.parentNode);
    }
    listener.switch();
})(`{
    //== Options
    noSelBehavior: { // Shift+Home
        ctrlKey:  false,
        altKey:   false,
        shiftKey: true,
        metaKey:  false,
        keyCode:  KeyEvent.DOM_VK_HOME,
        charCode: 0
    },
    // 0 - do nothing
    // 1 - convert all text
    // Or use object like following to simulate "keypress" event:
    /*
    noSelBehavior: { // Ctrl+Shift+Left
        ctrlKey:  true,
        altKey:   false,
        shiftKey: true,
        metaKey:  false,
        keyCode:  KeyEvent.DOM_VK_LEFT,
        charCode: 0
    }
    */
    convTableForward: { // ru -> en
        "\\"": "@",
        ":": "^",
        ";": "$",
        "?": "&",
        ",": "?",
        "/": "|",
        ".": "/",
        "э": "'",
        "б": ",",
        "ю": ".",
        "Ж": ":",
        "ж": ";",
        "Б": "<",
        "Ю": ">",
        "Э": "\\"",
        "х": "[",
        "ъ": "]",
        "ё": "\`",
        "Х": "{",
        "Ъ": "}",
        "Ё": "~",
        "№": "#",
        "Ф": "A",
        "ф": "a",
        "И": "B",
        "и": "b",
        "С": "C",
        "с": "c",
        "В": "D",
        "в": "d",
        "У": "E",
        "у": "e",
        "А": "F",
        "а": "f",
        "П": "G",
        "п": "g",
        "Р": "H",
        "р": "h",
        "Ш": "I",
        "ш": "i",
        "О": "J",
        "о": "j",
        "Л": "K",
        "л": "k",
        "Д": "L",
        "д": "l",
        "Ь": "M",
        "ь": "m",
        "Т": "N",
        "т": "n",
        "Щ": "O",
        "щ": "o",
        "З": "P",
        "з": "p",
        "Й": "Q",
        "й": "q",
        "К": "R",
        "к": "r",
        "Ы": "S",
        "ы": "s",
        "Е": "T",
        "е": "t",
        "Г": "U",
        "г": "u",
        "М": "V",
        "м": "v",
        "Ц": "W",
        "ц": "w",
        "Ч": "X",
        "ч": "x",
        "Н": "Y",
        "н": "y",
        "Я": "Z",
        "я": "z",
        __proto__: null
    },
    //== End of options

    get convTableBackward() {
        var ctb = { __proto__: null };
        var ctf = this.convTableForward;
        for(var c in ctf)
            ctb[ctf[c]] = c;
        delete this.convTableBackward;
        return this.convTableBackward = ctb;
    },
    inPrimaryLayout: function(s) {
        for(var i = 0, l = s.length; i < l; ++i) {
            var c = s.charAt(i);
            if(c in this.convTableForward)
                return true;
            if(c in this.convTableBackward)
                return false;
        }
        return false;
    },
    switchKeybLayout: function(s, convTable) {
        var res = "";
        for(var i = 0, l = s.length; i < l; ++i) {
            var c = s.charAt(i);
            res += c in convTable ? convTable[c] : c;
        }
        return res;
    },
    getFocusedElement: function() {
        return Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager)
            .getFocusedElementForWindow(content, true, {});
    },
    switchSelKeybLayout: function(_subCall, _focusFixed) {
        var fe = this.getFocusedElement(_subCall, _focusFixed);
        if(!fe)
            return;
        if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) {
            var ta = fe;
            try {
                var val = ta.value;
                var sel = val.substring(ta.selectionStart, ta.selectionEnd);
            }
            catch(e) { // Non-text HTMLInputElement
                return;
            }
            if(!sel && val && this.noSelBehavior && !_subCall) {
                if(this.noSelBehavior == 1) {
                    ta.selectionStart = 0;
                    ta.selectionEnd = val.length;
                    sel = val;
                }
                else {
                    this.handleNoSel(ta);
                    return;
                }
            }
            if(!sel)
                return;
            var res = this.switchKeybLayout(
                sel,
                this.inPrimaryLayout(sel)
                    ? this.convTableForward
                    : this.convTableBackward
            );
            if(res != sel)
                this.insertText(ta, res);
        }
        else if(fe.contentEditable == "true") {
            var doc = fe.ownerDocument;

            var docURI = doc.documentURI;
            if(
                docURI.substr(0, 5) == "data:"
                && docURI.indexOf("chrome://browser/skin/devtools/") != -1
            ) {
                //~ todo: seems like we only can use paste from clipboard here...
                return;
            }

            var sel = doc.defaultView.getSelection();
            var rng = sel.rangeCount && sel.getRangeAt(0);
            var tmpNode;
            if(!rng || rng.collapsed) {
                if(!this.noSelBehavior || _subCall)
                    return;
                if(this.noSelBehavior == 1) {
                    var r = doc.createRange();
                    r.selectNodeContents(fe);
                    sel.removeAllRanges();
                    sel.addRange(r);
                    tmpNode = fe.cloneNode(true);
                }
                else {
                    this.handleNoSel(fe);
                    return;
                }
            }
            else {
                tmpNode = doc.createElementNS("http://www.w3.org/1999/xhtml", "div");
                tmpNode.appendChild(rng.cloneContents());
            }

            var orig = tmpNode.innerHTML;
            var convTable = this.inPrimaryLayout(tmpNode.textContent)
                ? this.convTableForward
                : this.convTableBackward;

            var _this = this;
            var parseChildNodes = function(node) {
                if(node instanceof Element) {
                    var childNodes = node.childNodes;
                    for(var i = childNodes.length - 1; i >= 0; --i)
                        parseChildNodes(childNodes[i]);
                }
                else if(node.nodeType == node.TEXT_NODE) {
                    var text = node.nodeValue;
                    var newText = _this.switchKeybLayout(node.nodeValue, convTable);
                    if(newText != text)
                        node.parentNode.replaceChild(doc.createTextNode(newText), node);
                }
            }
            parseChildNodes(tmpNode);

            var res = tmpNode.innerHTML;
            if(res != orig)
                doc.execCommand("insertHTML", false, res);
        }
    },
    handleNoSel: function(node) {
        this.select(node);
        this.switchSelKeybLayout(true);
    },
    select: function(node) {
        var e = this.noSelBehavior;
        if(!e || typeof e != "object")
            return;
        var evt = node.ownerDocument.createEvent("KeyboardEvent");
        evt.initKeyEvent(
            "keypress", true /*bubbles*/, true /*cancelable*/, node.ownerDocument.defaultView,
            e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
            e.keyCode, e.charCode
        );
        node.dispatchEvent(evt);
    },
    insertText: function(ta, text) {
        //var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor
        var editor = ta.editor
            .QueryInterface(Components.interfaces.nsIPlaintextEditor);
        if(editor.flags & editor.eEditorReadonlyMask)
            return;

        var sTop = ta.scrollTop;
        var sHeight = ta.scrollHeight;
        var sLeft = ta.scrollLeft;
        // var sWidth = ta.scrollWidth;

        if(text)
            editor.insertText(text);
        else
            editor.deleteSelection(0, 0);

        ta.scrollTop = sTop + (ta.scrollHeight - sHeight);
        ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth);
    }
}`);

Отсутствует

 

№1405017-01-2020 13:32:47

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: Custom Buttons

Garalf пишет

Перестала работать кнопка Активизировать вкладку наведением курсора

Может так

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

Выделить код

Код:

((lst, trg) => trg && addEventListener("mouseover", lst, false, trg))({
    id: 0,
    tab: null,
    handleEvent(e) {
        var tab = e.target.closest("tab:not([selected]");
        if (tab && this.tab != tab)
            clearTimeout(this.id),
            this.id = setTimeout(this.onTimeout, 850, this.tab = tab, tab.screenX);
    },
    get onTimeout() {
        delete this.onTimeout;
        return this.onTimeout = (tab, x) => {
            if (tab.matches(":hover") && Math.abs(x - tab.screenX) < 50)
                gBrowser.selectedTab = tab;
            this.tab = null;
        }
    }
}, gBrowser.tabs[0].flattenedTreeParentNode);

solombala пишет

Кириллица в латиницу, гор. кнопки как? Не того...

В смысле во вкладку Код положить, или ты о чём?

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

Выделить код

Код:

event.target || this._handlers[0].eventHandler.switch();

bugzilla.mozilla.org пишет

Bug 1524327 - reconsider MOZ_ALLOW_LEGACY_EXTENSIONS behavior

Предварительная рефлексия, набросок нового config.js

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

Выделить код

Код:

//
try {(nsvo => {
    var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o, old;
    o.freeze = obj => {
        if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm")
            return freeze(obj);
        obj.MOZ_REQUIRE_SIGNING = false;
        if ((old = "MOZ_ALLOW_LEGACY_EXTENSIONS" in obj))
            obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
            lockPref("extensions.legacy.enabled", true);
        else
            lockPref("extensions.experiments.enabled", true);
        return (o.freeze = freeze)(obj);
    }
    lockPref("xpinstall.signatures.required", false);
    lockPref("extensions.langpacks.signatures.required", false);

    nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {});
    var shouldVerify = nsvo.shouldVerifySignedState;
    nsvo.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);

    if (!old) nsvo.XPIDatabase.isDisabledLegacy = () => false;

})(Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}));}
catch(ex) {Cu.reportError(ex);}


//
try {({
    ids: [
        "custombuttons@xsms.org",
    ],
    init(xrt) {
        if (xrt.inSafeMode) return;
        Cu.import("resource://gre/modules/addons/XPIProvider.jsm", this);
        var load = async file => {
            var rootURI = this.XPIInternal.getURIForResourceInFile(file, "");
            Cu.import(rootURI.resolve("startup.jsm"), {}).start(rootURI);
        }
        var proto = this.XPIInternal.BootstrapScope.prototype;
        var func = proto._beforeCallBootstrapMethod;

        proto._beforeCallBootstrapMethod = () => {
            proto._beforeCallBootstrapMethod = func;
            for(var addon of this.XPIInternal.XPIStates.enabledAddons())
                this.ids.includes(addon.id) && !addon.loader && load(addon.file);
        }
    }
}).init(Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime));}
catch(ex) {Cu.reportError(ex);}

Отредактировано Dumby (17-01-2020 13:36:06)

Отсутствует

 

Board footer

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