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

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

№1455129-04-2020 19:29:08

vitalii201
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 679
UA: Firefox 75.0

Re: Custom Buttons

Alewww, если кнопка не принципиально, букмарклет:

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

Выделить код

Код:

javascript:%20if%20(window.getSelection)%20selected%20=%20window.getSelection();%20else%20if%20(document.getSelection)%20selected%20=%20document.getSelection();%20else%20selected%20=%20document.selection.createRange().text;%20$s=%20''+selected;%20if(!$s)void%20($s=prompt('%D0%A7%D1%82%D0%BE%20%D0%B8%D1%81%D0%BA%D0%B0%D1%82%D1%8C-%D1%82%D0%BE%20%D0%B1%D1%83%D0%B4%D0%B5%D0%BC?','???'));if($s!=null)void(open('http://www.google.com/search?num=100&q=site:'+%20document.location.hostname+%20'+%20%22'+$s+'%22'))

Отсутствует

 

№1455230-04-2020 01:04:50

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 72
UA: Firefox 73.0

Re: Custom Buttons

други, помогите с букмарклетом или кнопкой

ситуация: нужен букмарклет или кнопка для выделения желтым цветом (как маркером) текста на странице

оригинал тут: https://gist.github.com/agibsonsw/a993c14ee172dfeb4d96
оригинал выдает пустую страницу с надписью null

пытался скорректировать вставками/удалениями из похожих, но не очень получается, выдает ошибку invalid identifier

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

Выделить код

Код:

javascript: (function() {
    var count = 0,
        text, dv;
    text = '' + selected;
    if (window.getSelection) selected = window.getSelection();
    else if (document.getSelection) selected = document.getSelection();
    else selected = document.selection.createRange().text;
    if (text == null || text.length == 0) return;
    dv = document.defaultView;

    function searchWithinNode(node, te, len) {
        var pos, skip, spannode, middlebit, endbit, middleclone;
        skip = 0;
        if (node.nodeType == 3) {
            pos = node.data.toUpperCase().indexOf(te);
            if (pos >= 0) {
                spannode = document.createElement("SPAN");
                spannode.style.backgroundColor = "yellow";
                middlebit = node.splitText(pos);
                endbit = middlebit.splitText(len);
                middleclone = middlebit.cloneNode(true);
                spannode.appendChild(middleclone);
                middlebit.parentNode.replaceChild(spannode, middlebit);
                count;
                skip = 1;
            }
        } else if (node.nodeType == 1 && node.childNodes && node.tagName.toUpperCase() != "SCRIPT" && node.tagName.toUpperCase != "STYLE") {
            for (var child = 0; child < node.childNodes.length; child) {
                child = child searchWithinNode(node.childNodes[child], te, len);
            }
        }
        return skip;
    }

    searchWithinNode(document.body, text.toUpperCase(), text.length);
})();

Добавлено 30-04-2020 01:08:21
поправка: для выделения желтым цветом (как маркером) ВЫДЕЛЕННОГО мышкой текста на странице

Отредактировано dezhnev (30-04-2020 01:08:21)

Отсутствует

 

№1455330-04-2020 09:47:35

Alewww
Участник
 
Группа: Members
Зарегистрирован: 31-01-2009
Сообщений: 16
UA: Firefox 71.0

Re: Custom Buttons

vitalii201, не принципиально. Но как теперь букмарклет поместить в кнопку.

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

Выделить код

Код:

var vert = ` javascript:%20if%20(window.getSelection)%20selected%20=%20window.getSelection();%20else%20if%20(document.getSelection)%20selected%20=%20document.getSelection();%20else%20selected%20=%20document.selection.createRange().text;%20$s=%20''+selected;%20if(!$s)void%20($s=prompt('%D0%A7%D1%82%D0%BE%20%D0%B8%D1%81%D0%BA%D0%B0%D1%82%D1%8C-%D1%82%D0%BE%20%D0%B1%D1%83%D0%B4%D0%B5%D0%BC?','???'));if($s!=null)void(open('http://www.google.com/search?num=100&q=site:'+%20document.location.hostname+%20'+%20%22'+$s+'%22'))` ;
gBrowser. loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });

начал немного про javascript читать, хотя я больше по python
как узнать текущий url вкладки?

Выделить код

Код:

var url=window.location.href;
alert(url);

Выводит

Выделить код

Код:

chrome://browser/content/browser.xhtml

И где можно прочитать про встроенные функции, методы и тп. например какие методы есть у gbrowser?

Лазить чисто по форуму и искать рабочие функции? Пока нашел совсем немного, но хотелось бы побольше функций:

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

Выделить код

Код:

/*
function UrlsToClipboard(){
gClipboard.write(Array.from(gBrowser.tabs).map(
    tab => tab.linkedBrowser.currentURI.spec.replace(/^http(?!s)/, "$&s")
).join("\n"));
}
UrlsToClipboard();

function OpenUrl(url){
  gBrowser.addTrustedTab(url,{relatedToCurrent: false, index: 0});
 }
OpenUrl('https://ya.ru/')
*/

// custombuttons.alertBox("Файл не найден", "text");  // расширенный alert
// document.getElementById("Browser:Reload").doCommand();  //обновить вкладку
// BrowserReload();  //обновить вкладку
// gClipboard.read();  //читаем буфер
// gClipboard.write();  //записываем в буфер
// gBrowser.removeAllTabsBut(gBrowser.selectedTab);  //закрыть другие вкладки кроме активной

Отредактировано Alewww (30-04-2020 17:07:19)

Отсутствует

 

№1455430-04-2020 18:07:24

katana
Участник
 
Группа: Members
Зарегистрирован: 04-09-2019
Сообщений: 25
UA: Firefox 75.0

Re: Custom Buttons

del

Отредактировано katana (01-05-2020 20:20:26)

Отсутствует

 

№1455530-04-2020 22:12:38

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

Re: Custom Buttons

dezhnev пишет

букмарклет или кнопка для выделения желтым цветом (как маркером) текста на странице
оригинал тут: https://gist.github.com/agibsonsw/a993c14ee172dfeb4d96

Ну, не совсем так. Выделяется жёлтым только текст,
который может быть найден целиком внутри одной текстовой ноды.

dezhnev пишет

оригинал выдает пустую страницу с надписью null
пытался скорректировать вставками/удалениями из похожих, но не очень получается, выдает ошибку invalid identifier

Выдаёт null потому, что функция-обёртка зачем-то возвращает null,
а в скорректированном куда-то разбежались знаки плюс (+).
Вольный пересказ оригинала:

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

Выделить код

Код:

javascript:(function(className) {
	var sel = getSelection().toString();

	if (!sel) return Array.from(
		document.getElementsByClassName(className)
	).forEach(span => {
		var pn = span.parentNode;
		if (pn)
			span.replaceWith(span.textContent),
			pn.normalize();
	});
	var txt = sel.toUpperCase(), len = txt.length;
	var ignore = "script,style,textarea"; /* ,etc" */

	(function searchWithinNode(node) {
		var type = node.nodeType;
		if (type == node.TEXT_NODE) {

			var pos = node.data.toUpperCase().indexOf(txt);
			if (pos >= 0) {
				var middlebit = node.splitText(pos);
				middlebit.splitText(len);

				var span = document.createElement("span");
				span.className = className;
				span.style.backgroundColor = "yellow";

				middlebit.replaceWith(span);
				span.append(middlebit);
				return 2;
			}
		}
		else if (type == node.ELEMENT_NODE && !node.matches(ignore)) for(
			var ind = 0;
			ind < node.childNodes.length;
			ind += searchWithinNode(node.childNodes.item(ind)) || 1
		);
	})(document.body);
})("yellow-marker-span_class_name");

Alewww пишет

И где можно прочитать про встроенные функции, методы и тп. например какие методы есть у gbrowser?

Прочитать кому?
Сами они и так всё знают, а нас для них больше не существует.
Раньше была дока типа такой, теперь чтиво — вкладка с адресом
chrome://browser/content/tabbrowser.js или тому подобное.

Отсутствует

 

№1455630-04-2020 23:11:14

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 72
UA: Firefox 73.0

Re: Custom Buttons

Dumby спасибо, выручил от установки еще одного вебекста с кучей лишнего функционала

а нас для них больше не существует

и ведь не поспоришь, как есть так и есть
как заберут долю рынка, чтобы отказаться от 1% квалифицированных пользователей, все, прощай iddqd :lol:
вопрос времени, года 4, пока гуглу не надоест и не перейдет на мобильный рынок полностью, по-другому мацареле не выгорит

Отсутствует

 

№1455701-05-2020 01:15:02

Alewww
Участник
 
Группа: Members
Зарегистрирован: 31-01-2009
Сообщений: 16
UA: Firefox 71.0

Re: Custom Buttons

Dumby пишет

Прочитать кому?

я про себя говорил, хотел ознакомиться с мануалами, думал они есть

Dumby, через кнопку можно отправить post запрос? Типа такого:

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

Выделить код

Код:

def ha_toggle():
    url = "http://192.168.1.64:8123/api/services/homeassistant/toggle"
    headers = {
        "Authorization": "tttoooookkkkeeeennnn",
        "content-type": "application/json",
    }
    data = '{"entity_id": "some_light"}'

    response = requests.post(url, headers=headers, data=data)

Отсутствует

 

№1455801-05-2020 09:42:43

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

Re: Custom Buttons

Alewww пишет

Dumby, через кнопку можно отправить post запрос?

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

Отсутствует

 

№1455901-05-2020 14:27:19

Alewww
Участник
 
Группа: Members
Зарегистрирован: 31-01-2009
Сообщений: 16
UA: Firefox 71.0

Re: Custom Buttons

Dumby пишет
Alewww пишет

Dumby, через кнопку можно отправить post запрос?

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

то что надо, спасибо!

Отсутствует

 

№1456002-05-2020 11:33:31

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 75.0

Re: Custom Buttons

Есть ли мануал как устанавливать CB на FF 75 без танцев с бубунами и часовыми лазаниями по ветке?

Отредактировано vurdalak (02-05-2020 11:33:52)

Отсутствует

 

№1456102-05-2020 21:23:18

katana
Участник
 
Группа: Members
Зарегистрирован: 04-09-2019
Сообщений: 25
UA: Firefox 75.0

Re: Custom Buttons

del

Отредактировано katana (31-05-2020 11:40:14)

Отсутствует

 

№1456204-05-2020 16:35:49

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

Re: Custom Buttons

katana

defaults -pref ?

скрытый текст
pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");
pref("general.config.sandbox_enabled", false);

Отсутствует

 

№1456304-05-2020 22:42:21

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

Re: Custom Buttons

«Merge Day»

custom_buttons-0.0.7.0.0.12-fx.txt

egorsemenov06 пишет

Выручайте в кнопке Save  не работает Открыть выделенный текст в внешнем редакторе, в контекстном меню. в консоле пишет ReferenceError: custombuttonsUtils is not defined

Да, за всем не уследишь.

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

Выделить код

Код:

//Save
try {CustomizableUI.createWidget({
	id: "ucf-cbbtn-Save",
	localized: false,
	get initCode() {
		delete this.initCode;
		return this.initCode = Cu.readUTF8URI(Services.io.newURI(
			"chrome://user_chrome_files/content/custom_scripts/Save.js"
		));
	},
	cbu: {
		types: {
			128: "Bool", boolean: "Bool",
			64: "Int", number: "Int",
			32: "String", string: "String"
		},
		getPrefs(pref) {
			try {
				return Services.prefs[`get${
					this.types[Services.prefs.getPrefType(pref)]
				}Pref`](pref);
			}
			catch {return null;}
		},
		setPrefs(pref, val) {
			Services.prefs[`set${this.types[typeof val]}Pref`](pref, val);
		}
	},
	gClipboard: {
		get ch() {
			delete this.ch;
			return this.ch = Cc["@mozilla.org/widget/clipboardhelper;1"]
				.getService(Ci.nsIClipboardHelper);
		},
		write(str) {
			this.ch.copyStringToClipboard(str, Services.clipboard.kGlobalClipboard);
		}
	},
	custombuttonsUtils: {
		writeFile(path, data) {
			try {
				if (path.includes(":\\")) path = path.replace(/\//g, "\\");
				var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
				file.initWithPath(path);
				file.exists() && file.remove(false);

				var strm = Cc["@mozilla.org/network/file-output-stream;1"]
					.createInstance(Ci.nsIFileOutputStream);
				strm.init(file, 0x04 | 0x08, 420, 0);
				strm.write(data, data.length);
				strm.flush();
				strm.close();
			} catch(ex) {
				Cu.reportError("Custom Buttons: " + [path, "---", ex, ex.stack].join("\n"));
			}
		}
	},
	addDestructor(destructor, context) {
		this._destructors.push({destructor, context});
	},
	addEventListener(...args) {
		var trg = args[3];
		if (!trg) trg = args[3] = this.ownerGlobal;
		trg.addEventListener(...args);
		this._handlers.push(args);
	},

	onCreated(btn) {
		var win = btn.ownerGlobal;
		btn._handlers = new win.Array();
		btn._destructors = new win.Array();
		win.addEventListener("unload", this, {once: true});
		new win.Function(
			"self,_id,cbu,xhtmlns,addDestructor,addEventListener,gClipboard,custombuttonsUtils",
			this.initCode
		).call(
			btn, btn, this.id, this.cbu,
			"http://www.w3.org/1999/xhtml",
			this.addDestructor.bind(btn),
			this.addEventListener.bind(btn),
			this.gClipboard, this.custombuttonsUtils
		);
	},
	handleEvent(e) {
		var btn = e.target.getElementById(this.id);
		for(var args of btn._handlers)
			args.pop().removeEventListener(...args);
		delete btn._handlers;
		for(var {destructor, context} of btn._destructors)
			try {destructor.call(context, "destructor");}
			catch(ex) {Cu.reportError(ex);}
		delete btn._destructors;
	}
});} catch(ex) {Cu.reportError(ex);}

Отсутствует

 

№1456405-05-2020 06:44:46

katana
Участник
 
Группа: Members
Зарегистрирован: 04-09-2019
Сообщений: 25
UA: Firefox 75.0

Re: Custom Buttons

Отсутствует

 

№1456505-05-2020 08:16:57

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

Re: Custom Buttons

Dumby
В FF76 перестала работать кнопка

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

Выделить код

Код:

// Дв. клик по панели вкладок..............
(selectors => addEventListener("dblclick", e => {
    /*
    if (
        e.button || e.ctrlKey || e.shiftKey || e.altKey
        || !e.originalTarget.matches(selectors)
    )
*/
    if (e.button || e.ctrlKey || e.shiftKey || e.altKey || !(
        e.target.className == "tabbrowser-arrowscrollbox"
        || e.originalTarget.matches(selectors)
    ))
        return;
    var hbuTabs = [], param = {animate: false};
    gBrowser.selectedTab = gBrowser.tabs[0];
    for(var tab of gBrowser.visibleTabs.reverse())
        //if (tab.pinned) break; else
        gBrowser._hasBeforeUnload(tab)
            ? hbuTabs.push(tab)
            : gBrowser.removeTab(tab, param);
    for(tab of hbuTabs)
        gBrowser.removeTab(tab, param);
}, false, document.getElementById("TabsToolbar") || 1))("" + [

    "#tabbrowser-tabs [class*=scrollbox]",
    "toolbarspring",
    "#TabsToolbar",
]);


Можно починить?

На форуме

 

№1456605-05-2020 12:08:50

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

Re: Custom Buttons

Garalf пишет

В FF76 перестала

Bug 1625895 - Change tabbrowser-arrowscrollbox from class to id
Так, наверно

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

Выделить код

Код:

//e.target.className == "tabbrowser-arrowscrollbox"
e.target.id == "tabbrowser-arrowscrollbox"

Отредактировано Dumby (05-05-2020 12:11:01)

Отсутствует

 

№1456705-05-2020 20:27:54

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

Re: Custom Buttons

Dumby
Как всегда)! Большое спасибо!

Добавлено 05-05-2020 20:30:31
egorsemenov06
У меня все работает

Отредактировано Garalf (05-05-2020 20:30:31)

На форуме

 

№1456806-05-2020 13:53:22

Quartz1t
Участник
 
Группа: Members
Зарегистрирован: 25-11-2013
Сообщений: 111
UA: unknown 0.0

Re: Custom Buttons

Dumby пишет

«Merge Day»
custom_buttons-0.0.7.0.0.12-fx.txt

В следйющей версии дополнения, добавьте пожалуйста строку для Pale Moon 29, чтобы не ругался....
С 27-й, т.к. есть ещё фанаты остающиеся на этой версии браузера.


Выделить код

Код:

<!-- Pale Moon -->
		<em:targetApplication>
			<Description>
				<em:id>{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}</em:id>
				<em:minVersion>27.0</em:minVersion>
				<em:maxVersion>*</em:maxVersion>
			</Description>
		</em:targetApplication>

То бишь Pale Moon 29 ругается на дополнения без этой подпись.

Отредактировано Quartz1t (06-05-2020 13:57:17)

Отсутствует

 

№1456907-05-2020 08:58:07

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

Re: Custom Buttons

Dumby подскажи на 76 выскакивает вот такая ошибка
TypeError: Custom Buttons: addEventListener: eventTarget is not instanceof nsIDOMEventTarget or EventTarget
Причем, если открыть и закрыть кнопку, то код работает

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

Выделить код

Код:

// Редактировать размеры поля выбора вкладок в окне добавления закладки звёздочки
((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 #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%;
    }
`);


и вот еще одна ошибка - TypeError: g.Utils is undefine
скрытый текст

Выделить код

Код:

//Открыть всё из папки закладок в новых вкладках не загружая страниц от 23.03.2019......................................................................
((g, id) => {
    addDestructor(r => r[5] == "e" && id in g && (g.PlacesUIUtils[id] = g[id]) && delete g[id]);
    if (id in g) return;

    g[id] = g.PlacesUIUtils[id];
    var func = g => PlacesUIUtils.openMultipleLinksInTabs = async function(nodeOrNodes, event, view) {

        var where, win = getBrowserWindow(view.ownerWindow);
        var newWin = !win || (where = win.whereToOpenLink(event, false, true)) == "window";

        var items = PlacesUtils.nodeIsContainer(nodeOrNodes)
            ? PlacesUtils.getURLsForContainerNode(nodeOrNodes)
            : Array.from(nodeOrNodes).filter(PlacesUtils.nodeIsURI);

        if (newWin) {
            var args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
            args.appendElement(PlacesUtils.toISupportsString(items.shift().uri));
            win = Services.ww.openWindow(
                win || null, AppConstants.BROWSER_CHROME_URL, null, "chrome,dialog=no,all", args
            );
            if (!items.length) return;
            await new Promise(resolve => win.addEventListener("load", resolve, {once: true}));
        }

        var loadInBackground = where == "tabshifted";
        var insertAfterCurrent = !newWin && Services.prefs.getBoolPref("browser.tabs.insertAfterCurrent");
        var triggeringPrincipal_base64 =
            g.Utils.SERIALIZED_SYSTEMPRINCIPAL || g.E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;

        var multi = items.length > 1;
        var params = {
            skipAnimation: multi || newWin,
            bulkOrderedOpen: multi,
            createLazyBrowser: true
        };
        if (insertAfterCurrent) params.index = win.gBrowser.selectedTab._tPos;

        var first = true;
        for(var {uri, title} of items) {
            if (insertAfterCurrent) params.index += 1;
            var tab = win.gBrowser.addTrustedTab(null, params);
            var state = {
                index: 1,
                hidden: false,
                attributes: {},
                lastAccessed: 0,
                entries: [{url: uri, title, triggeringPrincipal_base64}]
            };
            var image = await new Promise(resolve => PlacesUtils.favicons.getFaviconDataForPage(
                Services.io.newURI(uri),
                (uri, len, data, type) => {
                    if (!len) return resolve();
                    var reader = new FileReader();
                    reader.onloadend = () => resolve(reader.result);
                    reader.readAsDataURL(new Blob([new Uint8Array(data)], {type}));
                }, 16
            ));
            if (image) state.image = image;
            g.SessionStore.setTabState(tab, JSON.stringify(state));

            if (first) {
                first = false;
                if (newWin) continue;
                if (multi && insertAfterCurrent) params.index = tab._tPos;
              //  if (!loadInBackground) win.gBrowser.selectedTab = tab;
            }
        }
    }
    Services.scriptloader.loadSubScript("data:," + encodeURIComponent(
        `(${func})(Cu.import("resource:///modules/sessionstore/SessionStore.jsm", {}))`
    ), g);
})(Cu.import("resource:///modules/PlacesUIUtils.jsm", {}), "openMultipleLinksInTabs");

Отредактировано Andrey_Krropotkin (07-05-2020 09:26:01)

Отсутствует

 

№1457007-05-2020 15:23:40

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

Re: Custom Buttons

Andrey_Krropotkin пишет

подскажи на 76 выскакивает вот такая ошибка
TypeError: Custom Buttons: addEventListener: eventTarget is not instanceof nsIDOMEventTarget or EventTarget

Так и должно быть, специально написано: «panel || 1»,
чтобы листенер молча не ушёл в окно, если с panel что-то случится.
̣
А с panel случилось то, что её засунули в <html:template>,
и, похоже, собираются такое проделывать не только с ней.
У меня сейчас так:

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

Выделить код

Код:

((css, panel) => ({
	init() {
		panel = document.getElementById("editBookmarkPanel");
		if (panel) {
			addEventListener("popupshowing", this, false, panel);
			this.destroy && this.destroy();
			return;
		} else if (this.destroy) return;

		var mo = new MutationObserver(this.init.bind(this));
		mo.observe(document.getElementById("mainPopupSet"), {childList: true});
		addDestructor(this.destroy = reason => {
			mo.disconnect();
			if (reason) return;
			self._destructors.splice(self._destructors.findIndex(
				d => d.destructor == this.destroy
			), 1);
			delete this.destroy;
		});
	},
	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();

		gEditItemOverlay._paneInfo.visibleRows.add("keywordRow");
		gEditItemOverlay._element("keywordRow").collapsed = false;
		gEditItemOverlay._initKeywordField().catch(Cu.reportError);
	},
	popuphidden() {
		var {width, height} = this.row;
		Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height));
	}
}).init())(`

	#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_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%;
	}
`);

и вот еще одна ошибка - TypeError: g.Utils is undefine

Можно так записать: g.Utils && g.Utils.SERIALIZED_SYSTEMPRINCIPAL
или вообще удалить.

Отсутствует

 

№1457107-05-2020 21:51:29

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

Re: Custom Buttons

Dumby спасибо, разобрался

Отсутствует

 

№1457211-05-2020 08:43:01

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

Re: Custom Buttons

egorsemenov06
В custom_script.js

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

Выделить код

Код:

try {Services.obs.addObserver(function closer(s, topic, data) {
	Services.obs.removeObserver(closer, topic);
	if (data != "shutdown") return;
	var file = Services.dirsvc.get("ProfD", Ci.nsIFile);
	file.launch(file.append("sqlite.bat"));
}, "quit-application", false);} catch(ex) {Cu.reportError(ex);}

Отсутствует

 

№1457311-05-2020 10:20:55

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

Re: Custom Buttons

Dumby
В чем фишка custom_script.js , чем кнопка хуже? И почему батник, а не VBS ?

Отсутствует

 

№1457411-05-2020 11:53:54

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 72
UA: Firefox 73.0

Re: Custom Buttons

В чем фишка custom_script.js , чем кнопка хуже? И почему батник, а не VBS ?

тоже интересовал вопрос повальной переписью кнопок на ucjs, это конечно не плохо, я сам начал с ucjs, потом уже нашел кнопки)
но почему в формате Виталия, вероятно, чтобы поддерживать форум

погалаю, что автор предусматривает возможность закрытия поддержки CB, устал, понимаю :zzz:

Отсутствует

 

№1457511-05-2020 12:44:05

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

Re: Custom Buttons

solombala пишет

В чем фишка custom_script.js , чем кнопка хуже?

Код инициализации кнопок исполняется в каждом окне браузера,
после открытия окна, а также после редактирования и при взаимодействии
с режимом «Персонализация…» (при перетаскивании — многократно).


А custom_script.js исполняется только один раз, при старте браузера.
Говоря нестрого, его можно назвать филиалом config.js в профиле.
То есть, для данной задачи, подходит идеально.

И почему батник, а не VBS ?

А мне-то почём знать? Это надо спрашивать у того, кто запускает.


dezhnev пишет

вероятно,

погалаю, что

Да-да, вариант «просто потому, что чел попросил,
и попросил в определённом формате» совершенно невероятен,
примерно так же, как то, что всё зависит от факторов, куда более
серьёзных и могущественных, чем чьи-то там «предусмотрения».

Отсутствует

 

Board footer

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