2013-11-14 4 views
4

나는 사용자 스크립트로 자바 스크립트 게임을 수정하려고합니다.userscript에서 익명 함수 변수에 액세스 할 수 있습니까?

문제는 모든 게임 코드는 내 userscript와 JS 변수에 액세스 할 수있는이

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

같은 익명 함수로 래핑됩니다 있다는 것입니다?

편집 : 또한

참조 : How to alter this javascript with Greasemonkey?

이 질문은 Is it possible to gain access to the closure of a function?와 동일하지 않습니다!

+0

니스 찾기 @dystroy – Neal

+1

제 질문은 userscripts에 관한 것입니다. 다른 질문과 달리 원래 스크립트를 수정할 수 없습니다. 점점 익숙하지 않은 함수 랩핑 (wrapping)을 사용하는 스크립트가 점점 더 많아지고 있습니다 ... 이것은 userscripts의 끝인가요? oO –

+0

이것은이 질문과 중복되지 않습니다. 사용자 스크립트에는 페이지 범위 자바 스크립트에 사용할 수없는 추가 옵션이 있습니다. –

답변

1

예! You can if you use the right browser (Firefox).

userscript (Firefox)에서 페이지의 JS를 다시 작성하여 직접 액세스 할 수 있습니다. 참조 : "How to alter this javascript with Greasemonkey?".

귀하의 함수 호출 (인라인 스크립트) 같은 것 :

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

아아는 여전히 좋은 방법이 없다 :

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); 
} 

당신은 다음과 같은 변수에 액세스 할 크롬 userscript 또는 Tampermonkey 스크립트에서 이런 종류의 작업을 수행하십시오.

경우 문제의 JS와 스크립트는 다음 외부, in Chrome, you can use beforeload to block it입니다. 그런 다음 자신 만의 코드를 삽입하십시오. 개인 변수가 노출되도록 수정하십시오.

+0

답변 해 주셔서 감사합니다 :) 외부 스크립트 사용 예가 있습니까? Beforescriptexecute 이벤트로 원래의 외부 스크립트를 제거하고 동적으로 내 외부 스크립트 (익명 함수가없는 원본)를 추가했습니다. 하지만 내 스크립트가로드되기 전에 페이지가로드되어 정의되지 않은 함수에 대한 호출이 있습니다 ... –

+0

Firefox와 Greasemonkey를 함께 사용하고 있습니까? [메타 데이터 섹션] (http://wiki.greasespot.net/Metadata_Block)을 [this linked answer] (http://stackoverflow.com/a/11201555/331508)처럼 표시 했습니까? 각 행은 중요하며'@include '만 변경하여 시작해야합니다. –

+0

동일한 코드를 정확하게 사용하지 않았습니다. 그러나 마지막으로 원래 개발자는 글로벌 범위에서 가장 중요한 변수를 남겼습니다. 나는 스크립트에서 "유틸리티 기능"을 복사하여 붙여 넣기 만하면되었다. 그러나, 귀하의 전체 응답을 주셔서 감사합니다 :) –

1

아니요. 개인 범위에있는 변수에 액세스 할 수 없습니다.

+0

코드 및 브라우저에 따라 가능합니다. Userscripts는 때로 JS 코드를 다시 작성하여 액세스 권한을 부여 할 수 있습니다. 또는 다른 도구를 사용하여 스크립트 다운로드를 차단할 수 있습니다 (인라인이 아닌 경우). 그런 다음 사용자 스크립트는 신중하게 만들어진 대체품을 대신 삽입 할 수 있습니다. –

관련 문제