Content Scope Runner

From GreaseSpot

Jump to: navigation, search

An extension of the Content Script Injection technique, this snippet automatically runs the entire user script in the content scope.

if(typeof __PAGE_SCOPE_RUN__ == 'undefined') {
   (function page_scope_runner() {
      var script = document.createElement('script');
      script.setAttribute("type", "application/javascript");
      script.textContent = "(function() { var __PAGE_SCOPE_RUN__ = 'yes'; (" + page_scope_runner.caller.toString() + ")(); })();";
      document.documentElement.appendChild(script);
      document.documentElement.removeChild(script);
   })();
   return;
}

As soon as execution reaches this code, the entire script will be injected into the page and re-run. Thus you need not worry about any of the security restrictions from XPCNativeWrappers in the Greasemonkey sandbox. You also will, of course, not have access to any of the APIs.

[edit] Tips

  • This code must not be wrapped in a function, or the return will fail to work. It may be wrapped in a conditional.
  • Any code before the block will be run twice: Once in GreaseMonkey context, once in page context.
  • Any code after the block will only be run once, in the page context.

[edit] Explanation

The code block first checks to see if it is being run inside the page by looking for a marker it knows about. If the marker is not present, the block creates and injects a script element that starts by setting the aforementioned marker variable and finishes by executing the text of the userscript. Finally, the block calls return, ending execution.

Personal tools