| Index: lib/cssInjection.js | 
| =================================================================== | 
| --- a/lib/cssInjection.js | 
| +++ b/lib/cssInjection.js | 
| @@ -117,31 +117,34 @@ | 
| browser.tabs.removeCSS(tabId, { | 
| code: styleSheet, | 
| cssOrigin: "user", | 
| frameId, | 
| matchAboutBlank: true | 
| }); | 
| } | 
|  | 
| -function updateFrameStyles(tabId, frameId, selectors, groupName) | 
| +function updateFrameStyles(tabId, frameId, selectors, groupName, appendOnly) | 
| { | 
| -  let styleSheet = null; | 
| +  let styleSheet = ""; | 
| if (selectors.length > 0) | 
| styleSheet = createStyleSheet(selectors); | 
|  | 
| let frame = ext.getFrame(tabId, frameId); | 
| if (!frame) | 
| return false; | 
|  | 
| if (!frame.injectedStyleSheets) | 
| frame.injectedStyleSheets = new Map(); | 
|  | 
| let oldStyleSheet = frame.injectedStyleSheets.get(groupName); | 
|  | 
| +  if (appendOnly && oldStyleSheet) | 
| +    styleSheet = oldStyleSheet + styleSheet; | 
| + | 
| // Ideally we would compare the old and new style sheets and skip this code | 
| // if they're the same, but the old style sheet can be a leftover from a | 
| // previous instance of the frame. We must add the new style sheet | 
| // regardless. | 
|  | 
| // Add the new style sheet first to keep previously hidden elements from | 
| // reappearing momentarily. | 
| if (styleSheet && !addStyleSheet(tabId, frameId, styleSheet)) | 
| @@ -199,10 +202,10 @@ | 
| response.inlineEmulated = true; | 
|  | 
| return response; | 
| }); | 
|  | 
| port.on("elemhide.injectSelectors", (message, sender) => | 
| { | 
| updateFrameStyles(sender.page.id, sender.frame.id, message.selectors, | 
| -                    message.groupName); | 
| +                    message.groupName, message.appendOnly); | 
| }); | 
|  |