Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/content/browser.js b/content/browser.js
- index e6e9556..13d1c27 100644
- --- a/content/browser.js
- +++ b/content/browser.js
- @@ -335,6 +335,16 @@ function GM_showPopup(aEvent) {
- GM_MenuCommander.onPopupShowing(menuCommandPopup);
- }
- +/**
- + * Clean up the menu after it hides to prevent memory leaks
- + */
- +function GM_hidePopup(aEvent) {
- + var popup = aEvent.target;
- +
- + var menuCommandPopup = popup.getElementsByTagName('menupopup')[0];
- + if(menuCommandPopup) GM_MenuCommander.destroyItems(menuCommandPopup);
- +}
- +
- // Short-term workaround for #1406: Tab Mix Plus breaks opening links in
- // new tabs because it depends on this function, and incorrectly checks for
- diff --git a/content/browser.xul b/content/browser.xul
- index 14cbb2f..d9af0eb 100644
- --- a/content/browser.xul
- +++ b/content/browser.xul
- @@ -52,6 +52,7 @@
- >
- <menupopup
- onpopupshowing="GM_showPopup(event);"
- + onpopuphiding="GM_hidePopup(event);"
- onclick="GM_popupClicked(event);event.stopPropagation();"
- oncommand="GM_popupClicked(event);event.stopPropagation();"
- oncontextmenu="event.preventDefault();"
- diff --git a/content/menucommander.js b/content/menucommander.js
- index 4c61ad8..8d37004 100644
- --- a/content/menucommander.js
- +++ b/content/menucommander.js
- @@ -6,7 +6,8 @@ GM_MenuCommander.createMenuItem = function(command) {
- var menuItem = document.createElement("menuitem");
- menuItem.setAttribute("label", command.name);
- if ('function' == typeof command.commandFunc) {
- - menuItem.addEventListener("command", command.commandFunc, true);
- + menuItem._callback = command.commandFunc;
- + menuItem.setAttribute("oncommand", "this._callback();");
- }
- if (command.accessKey) {
- @@ -16,6 +17,14 @@ GM_MenuCommander.createMenuItem = function(command) {
- return menuItem;
- };
- +GM_MenuCommander.destroyItems = function(aMenuPopup) {
- + var menuItems = aMenuPopup.getElementsByTagName("menuitem");
- + for(var i = menuItems.length - 1; i >= 0; i--) {
- + delete menuItems[i]._callback;
- + }
- + GM_util.emptyEl(aMenuPopup);
- +};
- +
- GM_MenuCommander.onPopupShowing = function(aMenuPopup) {
- GM_util.emptyEl(aMenuPopup);
Add Comment
Please, Sign In to add comment