From 3fd4cd6d3bd837e7154c8c87af6814814d429036 Mon Sep 17 00:00:00 2001 From: Robert Manner Date: Wed, 24 Jun 2026 12:33:32 +0200 Subject: [PATCH 1/2] 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 --- src/js/background.js | 54 ++++++++++++++++---------------------------- src/js/dial.js | 34 +++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 35 deletions(-) diff --git a/src/js/background.js b/src/js/background.js index 8121c30..3a4ff8f 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -46,7 +46,15 @@ app.Messages.Commands = { refreshNode: 9, capturePage: 10, 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 browser.runtime.onMessage.addListener(function(request, sender, sendResponse){ @@ -302,18 +310,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m parentId: "pagemenunew", title: browser.i18n.getMessage("menuNewBookmark"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.createBookmark();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateBookmark }); } }); browser.contextMenus.create({ parentId: "pagemenunew", title: browser.i18n.getMessage("menuNewFolder"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.createFolder();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateFolder }); } }); browser.contextMenus.create({ parentId: "pagemenu", type: "separator" }); @@ -321,9 +325,7 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m parentId: "pagemenu", title: browser.i18n.getMessage("menuSettings"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.editSettings();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditSettings }); } }); // Create WebExt Link Context menu @@ -342,18 +344,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m parentId: "itemmenunew", title: browser.i18n.getMessage("menuNewBookmark"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.createBookmark();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateBookmark }); } }); browser.contextMenus.create({ parentId: "itemmenunew", title: browser.i18n.getMessage("menuNewFolder"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.createFolder();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCreateFolder }); } }); browser.contextMenus.create({ parentId: "itemmenu", type: "separator" }); @@ -361,18 +359,14 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m parentId: "itemmenu", title: browser.i18n.getMessage("menuProperties"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.editProperties(window.dial._selectedItem);" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditProperties }); } }); browser.contextMenus.create({ parentId: "itemmenu", title: browser.i18n.getMessage("menuRefreshItem"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.refreshNode(window.dial._selectedItem);" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuRefreshNode }); } }); browser.contextMenus.create({ @@ -380,27 +374,21 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m title: browser.i18n.getMessage("menuCaptureHere"), visible: false, onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.captureHere(window.dial._selectedItem);" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCaptureHere }); } }); browser.contextMenus.create({ parentId: "itemmenu", title: browser.i18n.getMessage("menuCapturePage"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.capturePage(window.dial._selectedItem);" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuCapturePage }); } }); browser.contextMenus.create({ parentId: "itemmenu", title: browser.i18n.getMessage("menuDeleteItem"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.deleteNode();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuDeleteNode }); } }); browser.contextMenus.create({ parentId: "itemmenu", type: "separator" }); @@ -408,9 +396,7 @@ app.ContextMenus.initMenu = function(){ // (Called from app.init) Init context m parentId: "itemmenu", title: browser.i18n.getMessage("menuSettings"), onclick(info, tab) { - browser.tabs.executeScript(tab.id, { - code: "window.dial.editSettings();" - }); + browser.tabs.sendMessage(tab.id, { cmd: app.Messages.Commands.menuEditSettings }); } }); }; diff --git a/src/js/dial.js b/src/js/dial.js index 7d9353d..cd981ce 100644 --- a/src/js/dial.js +++ b/src/js/dial.js @@ -84,7 +84,15 @@ app.Messages.Commands = { refreshNode: 9, capturePage: 10, 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(){ browser.runtime.onMessage.addListener(function(request, sender, sendResponse){ @@ -95,6 +103,30 @@ app.Messages.init = function(){ case app.Messages.Commands.gridNodesLoaded: if(dial.skipUpdate!=true) app.Messages.getNode(dial.path, app.GridNodes._changed); 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; } }); }; From 7dc29e5a7007f08e8e66b366fd34dcace068ce1b Mon Sep 17 00:00:00 2001 From: Robert Manner Date: Thu, 25 Jun 2026 09:25:59 +0200 Subject: [PATCH 2/2] Version 0.1.24 --- src/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/manifest.json b/src/manifest.json index ef9348c..808f9a2 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Quick Dial", - "version": "0.1.23", + "version": "0.1.24", "author": "MatMoul", "homepage_url": "https://github.com/MatMoul/quickdial-webext", "developer": {