Compare commits

..
10 Commits
Author SHA1 Message Date
MatMoulandGitHub b1f76dadde Merge pull request #193 from manner82/fix/issue-192-context-menus-sendmessage
Fix context menus on dial page for Firefox 152+ (replace deprecated tabs.executeScript)
2026-06-28 15:34:52 +02:00
Robert Manner 7dc29e5a70 Version 0.1.24 2026-06-25 09:25:59 +02:00
Robert Manner 3fd4cd6d3b js: replace deprecated tabs.executeScript with tabs.sendMessage
The dial-page context menus invoked window.dial.* functions via
browser.tabs.executeScript. That API is deprecated since Firefox 149 and
removed in Firefox 152, which broke creating/editing bookmarks and folders
from the dial page (issue #192).

Switch the menu handlers to browser.tabs.sendMessage. New menu command IDs
(200-207) are added to the Commands enum in both background.js and dial.js,
and the existing runtime.onMessage listener in dial.js now dispatches these
commands to the corresponding dial.* functions using the page-side
_selectedItem state.

Fixes #192
2026-06-24 12:42:21 +02:00
matmoul 42800d31c1 Version 0.1.23 2026-02-25 22:48:40 +01:00
matmoul 9cab257540 Fix iframe onload event positioning 2026-02-25 22:48:17 +01:00
matmoul 5a8e8bb745 Version 0.1.22 2026-02-25 18:45:42 +01:00
matmoul 8a54056392 fix:ESR compatibility 2026-02-25 18:45:05 +01:00
matmoul 20c106d5fa Version 0.1.21 2026-02-25 01:49:12 +01:00
matmoul 137bd470cf Fix: Replace 'dial' with 'dial.html' in URL paths and context menu patterns 2026-02-25 01:35:46 +01:00
matmoul a312b0b2d4 Rename dial to dial.html, update background.js to use dial.html URL, modify manifest.json to use dial.html for newtab and add data_collection_permissions 2026-02-25 01:07:47 +01:00
4 changed files with 66 additions and 45 deletions
View File
+26 -40
View File
@@ -6,7 +6,7 @@ app.init = function(){ // Init module
browser.runtime.sendMessage({ cmd: app.Messages.Commands.settingsChanged }); browser.runtime.sendMessage({ cmd: app.Messages.Commands.settingsChanged });
browser.browserAction.onClicked.addListener(function(e){ browser.browserAction.onClicked.addListener(function(e){
if(app.settings.openQuickDialInNewPage) browser.tabs.create({}); if(app.settings.openQuickDialInNewPage) browser.tabs.create({});
else browser.tabs.update(e.id, {url: '/dial'}).then(); else browser.tabs.update(e.id, {url: '/dial.html'}).then();
}); });
browser.runtime.sendMessage({ cmd: app.Messages.Commands.gridNodesLoaded }); browser.runtime.sendMessage({ cmd: app.Messages.Commands.gridNodesLoaded });
app.ContextMenus.initMenu(); app.ContextMenus.initMenu();
@@ -22,7 +22,7 @@ app.init = function(){ // Init module
browser.tabs.query({}).then( function(tabs) { browser.tabs.query({}).then( function(tabs) {
tabs.forEach(function(itm){ tabs.forEach(function(itm){
if(itm.url=='about:blank'){ if(itm.url=='about:blank'){
browser.tabs.update(itm.id, {url: browser.extension.getURL('dial')}); browser.tabs.update(itm.id, {url: browser.runtime.getURL('dial.html')});
} }
}); });
}); });
@@ -46,7 +46,15 @@ app.Messages.Commands = {
refreshNode: 9, refreshNode: 9,
capturePage: 10, capturePage: 10,
settingsChanged: 100, settingsChanged: 100,
gridNodesLoaded: 101 gridNodesLoaded: 101,
menuCreateBookmark: 200,
menuCreateFolder: 201,
menuEditSettings: 202,
menuEditProperties: 203,
menuRefreshNode: 204,
menuCaptureHere: 205,
menuCapturePage: 206,
menuDeleteNode: 207
}; };
app.Messages.init = function(){ // Init Messages Listeners app.Messages.init = function(){ // Init Messages Listeners
browser.runtime.onMessage.addListener(function(request, sender, sendResponse){ browser.runtime.onMessage.addListener(function(request, sender, sendResponse){
@@ -290,7 +298,7 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
browser.contextMenus.create({ browser.contextMenus.create({
id: "pagemenu", id: "pagemenu",
title: "Quick Dial", title: "Quick Dial",
documentUrlPatterns: [ 'moz-extension://*/dial', 'moz-extension://*/dial?*' ], documentUrlPatterns: [ 'moz-extension://*/dial.html', 'moz-extension://*/dial.html?*' ],
contexts: ["page"] contexts: ["page"]
}); });
browser.contextMenus.create({ browser.contextMenus.create({
@@ -302,18 +310,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
parentId: "pagemenunew", parentId: "pagemenunew",
title: browser.i18n.getMessage("menuNewBookmark"), title: browser.i18n.getMessage("menuNewBookmark"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateBookmark });
code: "window.dial.createBookmark();"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
parentId: "pagemenunew", parentId: "pagemenunew",
title: browser.i18n.getMessage("menuNewFolder"), title: browser.i18n.getMessage("menuNewFolder"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateFolder });
code: "window.dial.createFolder();"
});
} }
}); });
browser.contextMenus.create({ parentId: "pagemenu", type: "separator" }); browser.contextMenus.create({ parentId: "pagemenu", type: "separator" });
@@ -321,16 +325,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
parentId: "pagemenu", parentId: "pagemenu",
title: browser.i18n.getMessage("menuSettings"), title: browser.i18n.getMessage("menuSettings"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditSettings });
code: "window.dial.editSettings();"
});
} }
}); });
// Create WebExt Link Context menu // Create WebExt Link Context menu
browser.contextMenus.create({ browser.contextMenus.create({
id: "itemmenu", id: "itemmenu",
title: "Quick Dial", title: "Quick Dial",
documentUrlPatterns: [ 'moz-extension://*/dial', 'moz-extension://*/dial?*' ], documentUrlPatterns: [ 'moz-extension://*/dial.html', 'moz-extension://*/dial.html?*' ],
contexts: ["link"] contexts: ["link"]
}); });
browser.contextMenus.create({ browser.contextMenus.create({
@@ -342,18 +344,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
parentId: "itemmenunew", parentId: "itemmenunew",
title: browser.i18n.getMessage("menuNewBookmark"), title: browser.i18n.getMessage("menuNewBookmark"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateBookmark });
code: "window.dial.createBookmark();"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
parentId: "itemmenunew", parentId: "itemmenunew",
title: browser.i18n.getMessage("menuNewFolder"), title: browser.i18n.getMessage("menuNewFolder"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateFolder });
code: "window.dial.createFolder();"
});
} }
}); });
browser.contextMenus.create({ parentId: "itemmenu", type: "separator" }); browser.contextMenus.create({ parentId: "itemmenu", type: "separator" });
@@ -361,18 +359,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
parentId: "itemmenu", parentId: "itemmenu",
title: browser.i18n.getMessage("menuProperties"), title: browser.i18n.getMessage("menuProperties"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditProperties });
code: "window.dial.editProperties(window.dial._selectedItem);"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
parentId: "itemmenu", parentId: "itemmenu",
title: browser.i18n.getMessage("menuRefreshItem"), title: browser.i18n.getMessage("menuRefreshItem"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuRefreshNode });
code: "window.dial.refreshNode(window.dial._selectedItem);"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
@@ -380,27 +374,21 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
title: browser.i18n.getMessage("menuCaptureHere"), title: browser.i18n.getMessage("menuCaptureHere"),
visible: false, visible: false,
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCaptureHere });
code: "window.dial.captureHere(window.dial._selectedItem);"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
parentId: "itemmenu", parentId: "itemmenu",
title: browser.i18n.getMessage("menuCapturePage"), title: browser.i18n.getMessage("menuCapturePage"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCapturePage });
code: "window.dial.capturePage(window.dial._selectedItem);"
});
} }
}); });
browser.contextMenus.create({ browser.contextMenus.create({
parentId: "itemmenu", parentId: "itemmenu",
title: browser.i18n.getMessage("menuDeleteItem"), title: browser.i18n.getMessage("menuDeleteItem"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuDeleteNode });
code: "window.dial.deleteNode();"
});
} }
}); });
browser.contextMenus.create({ parentId: "itemmenu", type: "separator" }); browser.contextMenus.create({ parentId: "itemmenu", type: "separator" });
@@ -408,9 +396,7 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m
parentId: "itemmenu", parentId: "itemmenu",
title: browser.i18n.getMessage("menuSettings"), title: browser.i18n.getMessage("menuSettings"),
onclick(info, tab) { onclick(info, tab) {
browser.tabs.executeScript(tab.id, { browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditSettings });
code: "window.dial.editSettings();"
});
} }
}); });
}; };
@@ -563,8 +549,8 @@ app.SiteInfos.fromFrame = function(url, callback){ // Retrieve infos from an ifr
iframe.style.position = 'absolute'; iframe.style.position = 'absolute';
iframe.scrolling = 'no'; iframe.scrolling = 'no';
var content = xmlHttp.responseText.replace('<head>', '<head><base href="' + url + '">'); var content = xmlHttp.responseText.replace('<head>', '<head><base href="' + url + '">');
iframe.onload = function(){ pageLoaded(); }
document.body.appendChild(iframe); document.body.appendChild(iframe);
iframe.onload = function(){ pageLoaded(); }
iframe.srcdoc = content; iframe.srcdoc = content;
setTimeout(function(){ pageLoaded(); }, 6000); setTimeout(function(){ pageLoaded(); }, 6000);
} }
@@ -886,7 +872,7 @@ app.GridNodes.capturePage = function(gridNode, callback){
if(nodes){ if(nodes){
var path = ''; var path = '';
for(var i=1; i<nodes.length; i++) path = path + '/' + nodes[i].title; for(var i=1; i<nodes.length; i++) path = path + '/' + nodes[i].title;
app.SiteInfos.fromNewTab('/dial?path=' + path, function(infos){ app.SiteInfos.fromNewTab('/dial.html?path=' + path, function(infos){
if(infos){ if(infos){
gridNode.image = infos.screenshot; gridNode.image = infos.screenshot;
} else { } else {
+33 -1
View File
@@ -84,7 +84,15 @@ app.Messages.Commands = {
refreshNode: 9, refreshNode: 9,
capturePage: 10, capturePage: 10,
settingsChanged: 100, settingsChanged: 100,
gridNodesLoaded: 101 gridNodesLoaded: 101,
menuCreateBookmark: 200,
menuCreateFolder: 201,
menuEditSettings: 202,
menuEditProperties: 203,
menuRefreshNode: 204,
menuCaptureHere: 205,
menuCapturePage: 206,
menuDeleteNode: 207
}; };
app.Messages.init = function(){ app.Messages.init = function(){
browser.runtime.onMessage.addListener(function(request, sender, sendResponse){ browser.runtime.onMessage.addListener(function(request, sender, sendResponse){
@@ -95,6 +103,30 @@ app.Messages.init = function(){
case app.Messages.Commands.gridNodesLoaded: case app.Messages.Commands.gridNodesLoaded:
if(dial.skipUpdate!=true) app.Messages.getNode(dial.path, app.GridNodes._changed); if(dial.skipUpdate!=true) app.Messages.getNode(dial.path, app.GridNodes._changed);
break; break;
case app.Messages.Commands.menuCreateBookmark:
dial.createBookmark();
break;
case app.Messages.Commands.menuCreateFolder:
dial.createFolder();
break;
case app.Messages.Commands.menuEditSettings:
dial.editSettings();
break;
case app.Messages.Commands.menuEditProperties:
dial.editProperties(dial._selectedItem);
break;
case app.Messages.Commands.menuRefreshNode:
dial.refreshNode(dial._selectedItem);
break;
case app.Messages.Commands.menuCaptureHere:
dial.captureHere(dial._selectedItem);
break;
case app.Messages.Commands.menuCapturePage:
dial.capturePage(dial._selectedItem);
break;
case app.Messages.Commands.menuDeleteNode:
dial.deleteNode();
break;
} }
}); });
}; };
+7 -4
View File
@@ -2,7 +2,7 @@
"manifest_version": 2, "manifest_version": 2,
"name": "Quick Dial", "name": "Quick Dial",
"version": "0.1.20", "version": "0.1.24",
"author": "MatMoul", "author": "MatMoul",
"homepage_url": "https://github.com/MatMoul/quickdial-webext", "homepage_url": "https://github.com/MatMoul/quickdial-webext",
"developer": { "developer": {
@@ -37,13 +37,16 @@
}, },
"chrome_url_overrides" : { "chrome_url_overrides" : {
"newtab": "dial" "newtab": "dial.html"
}, },
"applications": { "browser_specific_settings": {
"gecko": { "gecko": {
"id": "quickdial@matmoul.com", "id": "quickdial@matmoul.com",
"strict_min_version": "70.0" "strict_min_version": "140.0",
"data_collection_permissions": {
"required": ["none"]
}
} }
}, },