|
|
(16 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
| An extension of the [[Content Script Injection]] technique, this snippet automatically runs the ''entire'' user script in the content scope.
| | As of Greasemonkey 1.0 specifying <code>[[@grant]] none</code> provides the behavior previously available by this technique. |
|
| |
|
| <pre class='sample'>
| | The previous content of this page is available [http://wiki.greasespot.net/index.php?title=Content_Scope_Runner&oldid=7215 via history] only. |
| (function page_scope_runner() {
| |
| if ('undefined' == typeof __PAGE_SCOPE_RUN__) {
| |
| // If we're _not_ already running in the page, grab the full source
| |
| // of this script.
| |
| var my_src = page_scope_runner.caller.toString();
| |
| | |
| // Create a script node holding this script, plus a marker that lets us
| |
| // know we are running in the page scope (not the Greasemonkey sandbox).
| |
| var script = document.createElement('script');
| |
| script.setAttribute("type", "application/javascript");
| |
| script.textContent = "const __PAGE_SCOPE_RUN__ = true;\n" + my_src;
| |
| | |
| // Insert the script node into the page, so it will run, and immediately
| |
| // remove it to clean up.
| |
| document.documentElement.appendChild(script);
| |
| document.documentElement.removeChild(script);
| |
| | |
| // Stop running, because we know Greasemonkey actually runs us in
| |
| // an anonymous wrapper.
| |
| return;
| |
| }
| |
| })();
| |
| </pre>
| |
| | |
| As long as this is the ''first'' piece of code in your script, it will stop execution of the remainder of the script, and re-start execution completely within the content scope.
| |
| 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 [[API]]s.
| |
| | |
| == @require ==
| |
| | |
| If used as the first [[Metadata Block#.40require|@require]]d script, this snippet will continue to run and work perfectly.
| |
| Try it by adding this line as the first @require in the [[Metadata Block]]:
| |
| | |
| <nowiki>// @require http://userscripts.org/scripts/source/68059.user.js</nowiki>
| |
| | |
| == See Also ==
| |
| | |
| * [[Content Script Injection]]
| |
| * [[Location hack]]
| |
| | |
| [[Category:Coding Tips:Interacting With The Page]]
| |
| [[Category:@require Library]]
| |
As of Greasemonkey 1.0 specifying @grant none
provides the behavior previously available by this technique.
The previous content of this page is available via history only.