2010-08-22 3 views
2

나는 페이지 기능을 대체하는 그리스 몽키 스크립트를 만들었습니다Chrome의 userscript를 통해 페이지 기능을 대체 하시겠습니까?

(function() { 
    var oldFunc = func; 
    func = function() { 
     oldFunc(); 
     // other stuff 
    }; 
)(); 

난 항상 Gresemonkey와 크롬 모두에서 작동이 스크립트를 구성했고 크롬 unsafeWindow를 지원하지 않습니다 읽은를, 이렇게 주입 된 문자열로 변환 함수 및 setTimeout를 사용하여 페이지에 스크립트 : 이것은 그리스 몽키에 완벽하게 잘 작동하지만, 나에게 크롬에서 절대적으로 아무것도주지 않는다

setTimeout("(function(){var old=func;func=function(){old();/*other stuff*/}}())", 0); 

. 그것은 분명히 발사가 아니지만 로그에 아무것도 나타나지 않습니다. 나는 다른 많은 주입 스타일을 시도했지만 아무 것도 할 수 없습니다. FUNC은 아니다 "아니오 경고하지만 - 페이지에 주입하지 않고, 범위 내 기능을 실행 아무것도

  • 을 -

    1. setTimeout(..., 0) (. 테스트를 위해, 또한 함수의 상단에 alert() 추가 없음) 아무것도
    2. document.body.addEventListener("load", ...) - - 아무것도 이들 모두는 @run-at document-end에 있습니다

    콘솔

  • document.href = "javascript:..."에서 "정의.

    불행히도, 내 첫 번째 Chrome 사용자 스크립트인데, 한 시간 정도 지나서 Google에서 디버깅하는 방법을 잃어 버렸습니다. 어떤 도움이 필요합니까? 현재 그리스 몽키에서 작업

    실제 스크립트 : 결국 http://pastebin.com/HtLVjYHg

  • 답변

    4

    은 크롬에서 일을 내가 발견하는 유일한 방법은 DOM 방법을 사용하여 <script> 노드를 만드는 것이 었습니다. 다행히,이 파이어 폭스와 오페라에서 동일하게 작동하는 것 같다 및 <func>.toString()에 의해 상당히 고통 구성됩니다

    function embed() { 
        var oldFunc = window.func; 
    
        window.func = function() { 
         oldFunc(); 
    
         // other stuff 
        }; 
    } 
    
    var inject = document.createElement("script"); 
    
    inject.setAttribute("type", "text/javascript"); 
    inject.appendChild(document.createTextNode("(" + embed + ")()")); 
    
    document.body.appendChild(inject); 
    

    최종 스크립트를 http://userscripts.org/scripts/review/84394

    관련 문제