14

I have created a Greasemonkey script for a website. What the script does is adding a div at the end of the page.

document.body.insertBefore(myDiv, document.body.firstChild);

But now the site adds an iframe for google-ads, as a result my div appears in the iframe too, which is not what I want.

How can I stop the script affecting iframes?

Brock Adams
  • 86,878
  • 22
  • 220
  • 282
fwonce
  • 367
  • 1
  • 5
  • 18

2 Answers2

16

I put this at the top of my scripts to avoid running on frames or iframes:

if (window.top != window.self)  //don't run on frames or iframes
    return;
npdoty
  • 4,566
  • 23
  • 24
11

Greasemonkey now supports the @noframes directive (long supported by Tampermonkey and Scriptish).
Use that for a cleaner way to block operation in iframes.


Unfortunately, npdoty's answer will now trigger a warning in Firefox's browser console:

Warning: use of return outside of functions is deprecated and may cause failures in future versions of Greasemonkey.

Community
  • 1
  • 1
Brock Adams
  • 86,878
  • 22
  • 220
  • 282
  • That warning is not a problem, you just need to wrap your script in an anonymous function: `(function(){ ... })();`, that's a good practice anyway. Thanks for the `@noframes`, upvoted. – user Jan 12 '15 at 18:12
  • 1
    Changed my acceptance. Thanks for providing a more elegant way. – fwonce Jan 29 '15 at 05:50