2013-11-14 145 views
4

我正在寻找修改JavaScript脚本的游戏。我可以访问脚本中的匿名函数变量吗?

的问题是,所有的游戏代码是包裹着这样

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

我能有机会与我的userscript一个JS变量匿名函数?

编辑:

参见:How to alter this javascript with Greasemonkey?

这个问题是不一样的Is it possible to gain access to the closure of a function?

+0

尼斯找到@dystroy – Neal

+1

我的问题是关于userscripts,我不能修改原始脚本不像其他问题。越来越多的脚本使用匿名函数包装...这是用户脚本的结束吗? oO –

+0

这不是该问题的重复。 Userscripts有其他选项不可用于页面范围的JavaScript。 –

回答

1

是的! You can if you use the right browser (Firefox)

在一个userscript(在Firefox上),你可以重写页面的JS来给你自己的访问权限。另请参阅"How to alter this javascript with Greasemonkey?"

你的函数调用会像(一个内嵌脚本):

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 userscript或Tampermonkey脚本中做这种事情。

IF有问题的脚本,与JS,是外部,然后in Chrome, you can use beforeload to block it。然后注入自己的代码 - 修改以显示私有变量。

+0

感谢您的回应:)您是否可以使用外部脚本的例子?我用beforescriptexecute事件删除了原始的外部脚本,并动态地添加了我的外部脚本(这是没有匿名函数的原始脚本)。但是页面在我的脚本加载前加载,所以有未定义的函数调用... –

+0

您使用的Firefox加Greasemonkey?你有没有像[在这个链接的答案](http://stackoverflow.com/a/11201555/331508)中所显示的[元数据部分](http://wiki.greasespot.net/Metadata_Block)?每条线都很重要,您应该只更改'@ include',以便开始。 –

+0

糟糕,我没有使用完全相同的代码。但最后,最初的开发者留下了全球范围内最重要的变量。我只需在脚本中复制/粘贴游戏的“实用程序功能”。但是,感谢您的完整回应:) –

1

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

+0

是的,你可以,根据代码和浏览器。有时候,用户脚本可能会重写JS代码以使自己能够访问。或者使用其他工具来阻止脚本的下载(如果不是内联的话)。然后userscript可以注入一个精心制作的替代品。 –

相关问题