|
阅读:1840回复:1
【已解决】更新117之后,解锁主菜单按钮的 movable-PanelUI-button.uc.js 失效https://github.com/xiaoxiaoflood/firefox-scripts/issues/265 已经按上面帖子更新了 scripts 文件,其他的 js 都没有问题,单单这个 movable-PanelUI-button.uc.js 失效。 // ==UserScript==
// @name more
// @author firefox
// @include main
// @shutdown more
// @onlyonce
// ==/UserScript==
Components.utils.import("resource:///modules/CustomizableUI.jsm");
var {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {});
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
(function(){
let widgetId = "movable-PanelUI-button";
let listener = {
onWidgetCreated: function(aWidgetId, aArea) {
if (aWidgetId != widgetId)
return;
if(listener.css !== undefined)
sss.unregisterSheet(listener.css, sss.AGENT_SHEET);
listener.css = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
#' + aWidgetId + '{\
list-style-image: url("chrome://browser/skin/menu.svg");\
}\
#PanelUI-button {\
display: none !important;\
}\
'), null, null);
sss.loadAndRegisterSheet(listener.css, sss.AGENT_SHEET);
}
}
CustomizableUI.addListener(listener);
CustomizableUI.createWidget({
id: widgetId,
type: "button",
defaultArea: CustomizableUI.AREA_NAVBAR,
label: "Main menu",
tooltiptext: "打开应用程序菜单",
onCreated: function(node) {
let originalMenu = node.ownerDocument.defaultView.PanelUI;
// helper function to not repeat so much code
function setEvent(event) {
node.addEventListener(event, function(){
originalMenu.menuButton = node;
}, {"capture": true});
node.addEventListener(event, originalMenu);
}
setEvent("mousedown");
setEvent("keypress");
}
});
})(); |
|
|
1楼#
发布于:2023-09-08 21:18
找了一个新的 uc.js,117 可用: https://github.com/benzBrake/FirefoxCustomize/blob/master/userChromeJS/movablePanelUIButton.uc.js // ==UserScript==
// @name
// @description 可移动 PanelUI 按钮
// @author Ryan, firefox
// @include main
// @shutdown window.movablePanelUIButton.destroy()
// @compatibility Firefox 78
// @homepage https://github.com/benzBrake/FirefoxCustomize
// @note 2022.09.07 修正新窗口不能定制
// @note 2022.09.05 修正窗口报错
// @note 2022.08.27 fx 102+
// @note 2022.07.02 非 xiaoxiaoflood 的 userChromeJS 环境测试可用
// @note 2022.04.20 修改为可热插拔(不知道非 xiaoxiaoflood 的 userChromeJS 环境是否可用)
// @onlyonce
// ==/UserScript==
(function () {
const CustomizableUI = globalThis.CustomizableUI || Cu.import("resource:///modules/CustomizableUI.jsm").CustomizableUI;
if (window.movablePanelUIButton) {
window.movablePanelUIButton.destroy();
}
window.movablePanelUIButton = {
get sss() {
delete this.sss;
return this.sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
},
STYLE_ICON: {
url: Services.io.newURI('data:text/css;charset=UTF-8,' + encodeURIComponent(`
#movable-PanelUI-button {
list-style-image: url(chrome://browser/skin/menu.svg);
}
`)),
type: 0
},
STYLE_DISPLAY: {
url: Services.io.newURI('data:text/css;charset=UTF-8,' + encodeURIComponent(`
#PanelUI-button {
display: none;
}
`)),
type: 0
},
listener: {
windows: windows,
onCustomizeStart(win) {
this.windows(function (doc, win, location) {
win.dispatchEvent(new CustomEvent("OriginalPanelUIButtonShow"));
})
},
onCustomizeEnd(win) {
this.windows(function (doc, win, location) {
win.dispatchEvent(new CustomEvent("OriginalPanelUIButtonHide"));
})
}
},
init: function () {
this.sss.loadAndRegisterSheet(this.STYLE_ICON.url, this.STYLE_ICON.type);
this.sss.loadAndRegisterSheet(this.STYLE_DISPLAY.url, this.STYLE_DISPLAY.type);
CustomizableUI.addListener(this.listener);
CustomizableUI.createWidget({
id: "movable-PanelUI-button",
type: "button",
defaultArea: CustomizableUI.AREA_NAVBAR,
localized: false,
removable: true,
onCreated: node => {
node.addEventListener('mousedown', this);
node.addEventListener('keypress', this);
let pNode = node.ownerDocument.getElementById('PanelUI-menu-button');
['label', 'tooltiptext'].forEach(attr => node.setAttribute(attr, pNode.getAttribute(attr)));
}
});
window.addEventListener('OriginalPanelUIButtonShow', this);
window.addEventListener('OriginalPanelUIButtonHide', this);
},
handleEvent: function (event) {
if (event.type === "mousedown" && event.button !== 0) return;
switch (event.type) {
case 'mousedown':
case 'keypress':
let { target: node } = event;
let { ownerDocument: document } = node;
const { PanelUI } = document.defaultView;
PanelUI.menuButton = node;
PanelUI.show();
break;
case 'OriginalPanelUIButtonShow':
this.sss.unregisterSheet(this.STYLE_DISPLAY.url, this.STYLE_DISPLAY.type);
break;
case 'OriginalPanelUIButtonHide':
this.sss.loadAndRegisterSheet(this.STYLE_DISPLAY.url, this.STYLE_DISPLAY.type);
break;
}
},
destroy: function () {
this.sss.unregisterSheet(this.STYLE_ICON.url, this.STYLE_ICON.type);
this.sss.unregisterSheet(this.STYLE_DISPLAY.url, this.STYLE_DISPLAY.type);
CustomizableUI.destroyWidget("movable-PanelUI-button");
windows(function (doc, win, location) {
doc.defaultView.PanelUI.menuButton = doc.getElementById('PanelUI-button');
})
window.removeEventListener('OriginalPanelUIButtonShow', this);
window.removeEventListener('OriginalPanelUIButtonHide', this);
delete this;
}
}
function windows(fun) {
let windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let win = windows.getNext();
if (!win._uc)
continue;
let { document, location } = win;
if (fun(document, win, location))
break;
}
}
window.movablePanelUIButton.init();
})(); |
|