The question is still not clear, please rewrite it like:
- I do X.
- I expect Y.
- But I get Z.
Update:
From the comments: Apparently the OP's problem really was that accessing StackExchange.options.routeName
in the script, outside the injected code, caused a ReferenceError, when using Scriptish, not Tampermonkey and Greasemonkey as stated in the question.
This is because Scriptish does not yet break the sandbox the same way that Greasemonkey and Tampermonkey do in @grant none
mode.
Solutions in decreasing order of preference/robustness:
- Don't use
@grant none
mode if you can help it. Keep script code sandboxed or inject it. - Inject all code that depends on the target page's javascript.
- Don't use Scriptish for code needing
@grant none
until such time as Scriptish more fully emulates the abysmal design decisions that Greasemonkey made with@grant
.
Old answer, may be useful to any others with similar problems:
The question's current code seems to work as expected on both browsers (Using Tampermonkey on Chrome).
A
setTimeout
or AJAX tricks don't seem to be needed to wait for, or access, that object.If you mean that you can't use
start_up
from the console, that's the nature of the particularwith_jquery()
function being used. It wraps your function in parentheses()
which effectively makes it anonymous.
I recommend never doing jQuery that way from a userscript. 99% of the time, use @require
and a @grant
setting other than none
.
On friendly, jQuery powered pages, where heavy interaction with page objects is desired (like Stack Exchange sites), use the page's jQuery like this:
// ==UserScript==
// @name (SE) Inspect global object
// @match *://*.stackoverflow.com/*
// @match *://*.stackapps.com/*
// @grant none
// ==/UserScript==
//var start_up = function( $ ) { // BAD
function start_up ( $ ) { // GOOD
console.log (
"===> ",
typeof StackExchange.options.routeName,
StackExchange.options.routeName
);
};
withPages_jQuery (start_up);
function withPages_jQuery (NAMED_FunctionToRun) {
//--- Use named functions for clarity and debugging...
var funcText = NAMED_FunctionToRun.toString ();
var funcName = funcText.replace (/^function\s+(\w+)\s*\((.|\n|\r)+$/, "$1");
var script = document.createElement ("script");
script.textContent = funcText + "\n\n";
script.textContent += 'jQuery(document).ready( function () {' + funcName + '(jQuery);} );';
document.body.appendChild (script);
};
This allows you to see your function (start_up
) and use or debug it from the console.