6

I'm looking for modify a javascript game with an userscript.

The problem is that all the game code is wrapped with a anonymous function like this

(function () { "use strict";
    var js = 'test';
})();

Can I have access to a JS variable with my userscript?

Edit :

See also : How to alter this javascript with Greasemonkey?

This question is not the same as Is it possible to gain access to the closure of a function? !

4

2 回答 2

2

是的! 如果您使用正确的浏览器 (Firefox),您可以

在用户脚本中(在 Firefox 上),您可以重写页面的 JS 以授予自己访问权限。另请参阅“如何使用 Greasemonkey 更改此 javascript?” .

您的函数调用将类似于(对于内联脚本):

checkForBadJavascripts ( [
    [false, /js = 'test'/, replaceTargetJavascript]
] );


function replaceTargetJavascript (scriptNode) {
    var scriptSrc   = scriptNode.textContent;
    scriptSrc       = scriptSrc.replace (
        /js = 'test';/,
        "js = 'test'; window.myJS = js;"
    );

    addJS_Node (scriptSrc);
}

然后,您将访问变量,例如:

console.log ("The var is: ", unsafeWindow.myJS);

唉,在Chrome用户脚本或 Tampermonkey 脚本 中仍然没有很好的方法来做这种事情。

如果带有问题的 JS 的脚本是external,那么在 Chrome 中,您可以使用beforeload来阻止它。然后注入您自己的代码——修改为公开该私有变量。

于 2013-11-14T22:50:00.620 回答
1

不,您不能访问私有范围内的变量。

于 2013-11-14T18:24:46.003 回答