Context-menu items to run a page/link’s command
Now you can right-click on a page and see a “Run shell command” item or a “Run command on link” item.
This commit is contained in:
parent
4d74ed0a10
commit
40b5ae16cb
|
@ -56,22 +56,48 @@ function compareRegexComplexity(a, b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Display the “Run shell command” context-menu item.
|
||||||
|
function showPageContextMenuItem() {
|
||||||
|
browser.menus.update("run-page-command", { "visible": true });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Display the “Run command on link” context-menu item.
|
||||||
|
function showLinkContextMenuItem() {
|
||||||
|
browser.menus.update("run-page-commands", { "visible": true });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Hide the “Run shell command context-menu item.
|
||||||
|
function hidePageContextMenuItem() {
|
||||||
|
browser.menus.update("run-page-command", { "visible": false });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Hide the “Run command on link” context-menu item.
|
||||||
|
function hideLinkContextMenuItem() {
|
||||||
|
browser.menus.update("run-page-commands", { "visible": false });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Add a context-menu item for running the current page’s associated command.
|
// Add a context-menu item for running the current page’s associated command.
|
||||||
function createContextMenuItem() {
|
browser.menus.create(
|
||||||
browser.menus.create(
|
|
||||||
{
|
{
|
||||||
id: "run-page-command",
|
id: "run-page-command",
|
||||||
title: "Run shell command",
|
title: "Run shell command",
|
||||||
contexts: ["page"]
|
contexts: ["page"]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Simply remove the context-menu item.
|
// Add a context-menu item for running the command associated with a link.
|
||||||
function removeContextMenuItem() {
|
browser.menus.create(
|
||||||
browser.menus.remove("run-page-command");
|
{
|
||||||
}
|
id: "run-link-command",
|
||||||
|
title: "Run command on link",
|
||||||
|
contexts: ["link"]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// When the address-bar button is clicked, run the according command (if any).
|
// When the address-bar button is clicked, run the according command (if any).
|
||||||
|
@ -80,19 +106,27 @@ browser.pageAction.onClicked.addListener((tab) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
browser.menus.onShown.addListener(info => {
|
||||||
|
if (info.contexts.includes("link") && getUrlCommand(info.linkUrl))
|
||||||
|
showLinkContextMenuItem();
|
||||||
|
else if (info.contexts.includes("page") && getUrlCommand(info.pageUrl))
|
||||||
|
showPageContextMenuItem();
|
||||||
|
else {
|
||||||
|
hidePageContextMenuItem();
|
||||||
|
hideLinkContextMenuItem();
|
||||||
|
}
|
||||||
|
browser.menus.refresh();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// When a tab’s URL has been changed, enable/disable the address-bar button
|
// When a tab’s URL has been changed, enable/disable the address-bar button
|
||||||
// based on whether or not there is an according command.
|
// based on whether or not there is an according command.
|
||||||
browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
||||||
let command = getUrlCommand(tab.url);
|
let command = getUrlCommand(tab.url);
|
||||||
if (command) {
|
if (command)
|
||||||
browser.pageAction.show(tabId);
|
browser.pageAction.show(tabId);
|
||||||
if (tab.active)
|
else
|
||||||
createContextMenuItem();
|
|
||||||
} else {
|
|
||||||
browser.pageAction.hide(tabId);
|
browser.pageAction.hide(tabId);
|
||||||
if (tab.active)
|
|
||||||
removeContextMenuItem();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,18 +134,19 @@ browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
||||||
// on whether or not there is an according command for it.
|
// on whether or not there is an according command for it.
|
||||||
browser.tabs.onActivated.addListener((activeInfo) => {
|
browser.tabs.onActivated.addListener((activeInfo) => {
|
||||||
browser.tabs.get(activeInfo.tabId).then((tab) => {
|
browser.tabs.get(activeInfo.tabId).then((tab) => {
|
||||||
if (getUrlCommand(tab.url)) {
|
if (getUrlCommand(tab.url))
|
||||||
browser.pageAction.show(tab.id);
|
browser.pageAction.show(tab.id);
|
||||||
createContextMenuItem();
|
else
|
||||||
} else {
|
|
||||||
browser.pageAction.hide(tab.id);
|
browser.pageAction.hide(tab.id);
|
||||||
removeContextMenuItem();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// When a context-menu item is selected, let’s execute its will!
|
||||||
browser.menus.onClicked.addListener((info, tab) => {
|
browser.menus.onClicked.addListener((info, tab) => {
|
||||||
if (info.menuItemId == "run-page-command")
|
if (info.menuItemId == "run-page-command")
|
||||||
runUrlCommand(tab.url);
|
runUrlCommand(tab.url);
|
||||||
|
else if (info.menuItemId == "run-link-command" && info.linkUrl)
|
||||||
|
runUrlCommand(info.linkUrl);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,8 +19,9 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"nativeMessaging",
|
|
||||||
"activeTab",
|
"activeTab",
|
||||||
|
"nativeMessaging",
|
||||||
|
"menus",
|
||||||
"tabs"
|
"tabs"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -38,7 +39,6 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
"options_ui": {
|
"options_ui": {
|
||||||
"page": "options.html",
|
"page": "options.html"
|
||||||
"open_in_tab": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Ŝarĝante…
Reference in New Issue