OpenWith.uc.js in v143.0beta1
Fx 144
JavaScript
// ==UserScript==
// @name OpenWith
// @description Fügt dem Kontextmenü ein Menü hinzu, zum Öffnen der aktuelle Seite und eines ausgewählten Links in einem anderen Browser.
// @description und eines ausgewählten Links in einem anderen Browser.
// @version 1.2.1a 63+
// @author y2k
// @include main
// @charset UTF-8
// @namespace http://tabunfirefox.web.fc2.com/
// @note Anwendungssymbol anzeigen
// @note als .uc.js Script umgeschrieben
// @note von Mira Zeile 82 + 3 angepasst für Icons Anzeige wieder
// @note von Mira für einzelne Profile angepasst
//https://www.camp-firefox.de/forum/thema/139664-scrolltopandbottom-uc-js-und-open-with-uc-js-zeigen-keine-icons-mehr-an-im-night/?postID=1276915#post1276915
// ==/UserScript==
(function() {
"use strict";
if (location != 'chrome://browser/content/browser.xhtml') return;
/*
Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt)
Zum Übergeben von Argumenten, wie folgt vorgehen:
C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument
※ $1 wird in URL umgewandelt
*/
const BrowserPath = {
"Nightly Neu ": "D:\\Nightly Neu\\Firefox Launcher.exe",
"Beta": "D:\\Beta\\BetaLoader.exe",
"Neu": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Test-ohne",
"Clean": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Clean",
"Test Firefox": "D:\\Test-Firefox\\Firefox Launcher.exe",
"ESR 140": "D:\\ESR 140\\ESRLoader.exe",
"ESR 128": "D:\\ESR 128\\ESRLoader.exe",
"ESR 115": "D:\\ESR 115\\ESRLoader.exe",
"ESR 102": "G:\\ESR 102\\ESRLoader.exe",
"ESR 91": "G:\\ESR 91\\FirefoxLoader.exe",
"ESR 78": "G:\\ESR 78\\FirefoxLoader.exe",
"ESR 68": "G:\\ESR 68\\FirefoxLoader.exe",
"ESR 52": "G:\\ESR 52\\FirefoxLoader.exe",
"Chrome": "D:\\Portable Chrome neu\\Chrome Launcher.exe",
"Edge": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
};
const FlatMenu = false;
const OpenWith = {
start: function() {
const cm = document.getElementById("contentAreaContextMenu");
cm.addEventListener("popupshowing", function(e) {
if (e.target == this) {
OpenWith.onpopup(e);
}
}, false);
},
createMenu: function() {
if (this.pageItem) {
return;
}
const contextMenu = document.getElementById("contentAreaContextMenu");
const pageMenu = this.$C("menu", {
id: "context-open-with-page",
label: "Seite öffnen mit:"
});
contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-bookmarkpage, :scope > #context-savepage"));
this.pageItem = this.createMenuItem(pageMenu, "openPage", FlatMenu ? "Seite öffnen mit $1 " : " $1");
},
createMenuItem: function(menu, method, format) {
const frag = document.createDocumentFragment();
let menuitem = [];
for (let i of Object.keys(BrowserPath)) {
const item = this.$C("menuitem", {
label: format.replace("$1", i),
class: "menuitem-iconic",
image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16",
value: JSON.stringify([method, i]),
});
item.addEventListener("command", this, false);
frag.appendChild(item);
menuitem[menuitem.length] = item;
}
if (!FlatMenu) {
const menupopup = this.$C("menupopup");
menupopup.appendChild(frag);
menu.appendChild(menupopup);
menuitem = [menu];
} else {
const parent = menu.parentNode;
parent.insertBefore(frag, menu);
parent.removeChild(menu);
}
return menuitem;
},
$C: function(tag, attrs) {
const elem = document.createXULElement(tag);
if (attrs) {
for (let key of Object.keys(attrs))
elem.setAttribute(key, attrs[key]);
}
return elem;
},
onpopup: function(e) {
this.createMenu();
const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
const pageItemHidden = !isHtml || gContextMenu.onLink || gContextMenu.onTextInput;
const pageItem = this.pageItem;
for (let i = 0, l = pageItem.length; i < l; i++) {
pageItem[i].hidden = pageItemHidden;
}
},
handleEvent: function(event) {
if (event.type === "command") {
const [method, key] = JSON.parse(event.originalTarget.getAttribute("value"));
const url = gBrowser.currentURI.spec;
this.launch(BrowserPath[key], url);
}
},
launch: function(browserPath, openURL) {
let [path, args] = browserPath.split("<>");
if (args) {
args = args.split(" ").map(a => a.replace("$1", openURL)); // Split bei Leerzeichen
} else {
args = [openURL];
}
console.log("Call: " + args);
const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length, {});
},
};
OpenWith.start();
})();
//...............................................................................................
(function() {
"use strict";
if (location != 'chrome://browser/content/browser.xhtml') return;
/*
Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt)
Zum Übergeben von Argumenten, wie folgt vorgehen:
C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument
※ $1 wird in URL umgewandelt
*/
const BrowserPath = {
"Nightly Neu ": "D:\\Nightly Neu\\Firefox Launcher.exe",
"Beta": "D:\\Beta\\BetaLoader.exe",
"Neu": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Test-ohne",
"Clean": "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Clean",
"Test Firefox": "D:\\Test-Firefox\\Firefox Launcher.exe",
"ESR 140": "D:\\ESR 140\\ESRLoader.exe",
"ESR 128": "D:\\ESR 128\\ESRLoader.exe",
"ESR 115": "D:\\ESR 115\\ESRLoader.exe",
"ESR 102": "G:\\ESR 102\\ESRLoader.exe",
"ESR 91": "G:\\ESR 91\\FirefoxLoader.exe",
"ESR 78": "G:\\ESR 78\\FirefoxLoader.exe",
"ESR 68": "G:\\ESR 68\\FirefoxLoader.exe",
"ESR 52": "G:\\ESR 52\\FirefoxLoader.exe",
"Chrome": "D:\\Portable Chrome neu\\Chrome Launcher.exe",
"Edge": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
};
const FlatMenu = false;
const OpenWith = {
start: function() {
const cm = document.getElementById("contentAreaContextMenu");
cm.addEventListener("popupshowing", function(e) {
if (e.target == this) { OpenWith.onpopup(e); }
}, false);
},
createMenu: function() {
// Nur einmal ausführen
if (this.linkItem) {
return;
}
const contextMenu = document.getElementById("contentAreaContextMenu");
// Nur noch das Link-Menü erstellen
const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit:" });
contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));
// Nur noch die Menüeinträge für den Link erstellen
this.linkItem = this.createMenuItem(linkMenu, "openLink", FlatMenu? "Link öffnen mit $1 ":" $1");
},
createMenuItem: function(menu, method, format) {
const frag = document.createDocumentFragment();
let menuitem = [];
for (let i of Object.keys(BrowserPath)) {
const item = this.$C("menuitem", {
label: format.replace("$1", i),
class: "menuitem-iconic",
image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16",
value: JSON.stringify([ method, i ]),
});
item.addEventListener("command", this, false);
frag.appendChild(item);
menuitem[menuitem.length] = item;
}
if (!FlatMenu) {
const menupopup = this.$C("menupopup");
menupopup.appendChild(frag);
menu.appendChild(menupopup);
menuitem = [ menu ];
}
else {
const parent = menu.parentNode;
parent.insertBefore(frag, menu);
parent.removeChild(menu);
}
return menuitem;
},
$C: function(tag, attrs) {
const elem = document.createXULElement(tag);
if (attrs) {
for (let key of Object.keys(attrs))
elem.setAttribute(key, attrs[key]);
}
return elem;
},
onpopup: function(e) {
this.createMenu();
// Logik für das Seiten-Menü wurde entfernt.
// Das Link-Menü wird nur angezeigt, wenn man auf einem Link ist.
const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
const linkItemHidden = !isHtml || !gContextMenu.onLink || gContextMenu.onTextInput;
const linkItem = this.linkItem;
for (let i = 0, l = linkItem.length; i < l; i++) {
linkItem[i].hidden = linkItemHidden;
}
},
handleEvent: function(event) {
if (event.type === "command") {
// Da es nur noch "openLink" gibt, kann die Logik vereinfacht werden.
const [ method, key ] = JSON.parse(event.originalTarget.getAttribute("value"));
const url = gContextMenu.linkURL; // Es wird immer die Link-URL sein
this.launch(BrowserPath[key], url);
}
},
launch: function(browserPath, openURL) {
let [ path, args ] = browserPath.split("<>");
if (args) {
args = args.split(" ").map(a => a.replace("$1", openURL));
} else {
args = [ openURL ];
}
const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length, {});
},
};
OpenWith.start();
})();
Alles anzeigen