2013-11-14 143 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可以注入一個精心製作的替代品。 –

相關問題