2010-07-15 4 views
4

을 실행 JS 내장 중지 :그리스 몽키는 : 페이지가 html로에서 다음이

<script type="text/javascript"> 
    // some code 
</script> 

내 그리스 몽키 스크립트는를 실행하는 스크립트를 방지 할 필요가있다. 어떻게해야합니까?


업데이트 : 나는 일반적인 경우에이 불가능하다는 것을 알고 있습니다. 그러나, 나의 특정한 경우에, 나는 허점을 가지고 있을지도 모른다?

<script type="text/javascript"> 
    if (!window.devicePixelRatio) { 
    // some code that I -don't- want to be run, regardless of the browser 
    } 
</script> 

포함 된 스크립트가 실행되기 전에 내가 window.devicePixelRatio을 정의 할 수있는 몇 가지 방법이 있나요?

답변

2

사용자 스크립트는 페이지가로드 된 후에 실행되므로 수행 할 수 없습니다.

코드에서 "onload"이벤트를 사용하는 경우를 제외합니다. DOM이 완전히로드 된 후에

사용자 스크립트가 실행되지만, 이전에는 온로드 가 발생합니다. 즉, 스크립트 이 즉시 시작될 수 있으며 이 필요하지 않습니다.

+0

감사합니다. 나는 스크립트가하는 일을 해보려 고 노력하기 위해 최선을 다할 것입니다. 나는 그 질문을 다음과 같이 업데이트했다. 가능하다면 ... 아니면 GM 스크립트가 실행될 때까지는 너무 늦었 을까? – Mala

+0

사용자 스크립트가 없습니다. 임베디드 자바 스크립트는 브라우저에서로드하는 즉시 실행됩니다. 사용자 스크립트는 전체 페이지가로드 된 후에 실행됩니다. –

1

또 다른 옵션은 GreaseMonkey 대신 Privoxy를 사용하는 것입니다. Privoxy를 프록시 (로컬 호스트)로 사용하고 마음에 들지 않는 문자열을 검색/바꾸기 만하면됩니다.

+0

그건 매우 번거로운 대안입니다. – beppe9000

12

이제 @run-at document-start과 HTML5의 beforescriptexecute으로 가능합니다. FF24에서만 테스트되었습니다.

// ==UserScript== 
... 
// @run-at   document-start 
// ==/UserScript== 

//a search string to uniquely identify the script 
//for example, an anti-adblock script 
var re = /adblock/i; 

window.addEventListener('beforescriptexecute', function(e) { 

    if(re.test(e.target.text)){ 

     e.stopPropagation(); 
     e.preventDefault(); 
    } 

}, true); 
+0

+1하지만 FF로만 작동하며 FF 버전 4부터 지원되었습니다. 또한이 경우'.text' 대신'.textContent'를 사용하는 것이 좋습니다. –

1

재 :

내가 포함 된 스크립트가 실행되기 전에 window.devicePixelRatio을 정의 할 수있는 몇 가지 방법이 있나요?

지금 있습니다. 그래서 같이 : 일반적인 경우

// ==UserScript== 
// @name  _Pre set devicePixelRatio 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @run-at document-start 
// @grant none 
// ==/UserScript== 
//-- @grant none is imporatant in this case. 

window.devicePixelRatio = "Unimportant string or function or whatever"; 


:

파이어 폭스 버전 4부터, 이것은 단지 파이어 폭스에서 지금 가능하다. 을 사용하여 beforescriptexecute의 힘을 활용하십시오. 과 같이 : window.devicePixelRatio를 포함

// ==UserScript== 
// @name  _Block select inline JS 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require https://gist.github.com/raw/2620135/checkForBadJavascripts.js 
// @run-at document-start 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

checkForBadJavascripts ([ 
    [false, /window\.devicePixelRatio/, null] 
]); 


이 차단 인라인 스크립트, 완전히. 해당 스크립트의 일부를 선택적으로 수정하려면 this answer 및/또는 this answer을 참조하십시오.

관련 문제