| Index: include.postload.js |
| diff --git a/include.postload.js b/include.postload.js |
| index 30f02b011848af3a9e5cf05cdaf80d84940f5a69..2aacf80e1737d6e928b2d347f28bd431e0fcb381 100644 |
| --- a/include.postload.js |
| +++ b/include.postload.js |
| @@ -22,6 +22,7 @@ var currentElement = null; |
| var highlightedElementsSelector = null; |
| var clickHideFiltersDialog = null; |
| var lastRightClickEvent = null; |
| +var lastRightClickEventRandom = null; |
| function escapeChar(chr) |
| { |
| @@ -389,6 +390,8 @@ function clickHide_deactivate(keepOverlays) |
| if (!keepOverlays) |
| { |
| + lastRightClickEvent = null; |
| + |
| if (currentElement) { |
| currentElement.removeEventListener("contextmenu", clickHide_elementClickHandler, true); |
| unhighlightElements(); |
| @@ -524,8 +527,17 @@ function clickHide_mouseClick(e) |
| addSelector(escapeCSS(elt.localName) + '[style=' + quote(style) + ']'); |
| } |
| - // Show popup |
| - clickHide_showDialog(e.clientX, e.clientY, clickHideFilters); |
| + // Show popup, or if inside frame tell the parent to do it |
| + if (window.self == window.top) |
| + clickHide_showDialog(e.clientX, e.clientY, clickHideFilters); |
| + else |
| + ext.backgroundPage.sendMessage( |
| + { |
| + type: "clickHide-showDialog", |
| + screenX: e.screenX, |
| + screenY: e.screenY, |
| + clickHideFilters: clickHideFilters |
| + }); |
| // Highlight the elements specified by selector in yellow |
| if (selectorList.length > 0) |
| @@ -577,8 +589,18 @@ if ("ext" in window && document instanceof HTMLDocument) |
| // To make things easier, we actually save the DOM event. |
| // We have to do this because the contextMenu API only provides a URL, not the actual |
| // DOM element. |
| - document.addEventListener('contextmenu', function(e) { |
| + document.addEventListener('contextmenu', function(e) |
| + { |
| lastRightClickEvent = e; |
| + // We also need to ensure any old lastRightClickEvent variables in other |
| + // frames are cleared. So we store a random number, send a message to all |
| + // frames that they should clear lastRightClickEvent unless the number matches |
| + lastRightClickEventRandom = Math.random(); |
|
Sebastian Noack
2015/01/16 22:45:31
I don't really like the approach here to generate
kzar
2015/01/16 23:03:45
Done.
|
| + ext.backgroundPage.sendMessage( |
| + { |
| + type: "clickHide-clear-lastRightClickEvent", |
| + random: lastRightClickEventRandom |
| + }); |
| }, true); |
| document.addEventListener("click", function(event) |
| @@ -681,7 +703,7 @@ if ("ext" in window && document instanceof HTMLDocument) |
| } |
| break; |
| case "clickhide-close": |
| - if (clickHideFiltersDialog && msg.remove) |
| + if (currentElement && msg.remove) |
| { |
| // Explicitly get rid of currentElement |
| var element = currentElement.prisoner || currentElement; |
| @@ -690,6 +712,17 @@ if ("ext" in window && document instanceof HTMLDocument) |
| } |
| clickHide_deactivate(); |
| break; |
| + case "clickHide-showDialog": |
|
Sebastian Noack
2015/01/16 22:45:31
For consistency with the message types implemented
kzar
2015/01/16 23:03:45
Done.
|
| + if (window.self == window.top) |
| + clickHide_showDialog(msg.screenX + window.pageXOffset, |
| + msg.screenY + window.pageYOffset, |
| + msg.clickHideFilters); |
| + break; |
| + case "clickHide-clear-lastRightClickEvent": |
| + if (msg.random != lastRightClickEventRandom) |
| + lastRightClickEvent = null; |
| + lastRightClickEventRandom = null; |
| + break; |
| } |
| }); |