2012-05-01 4 views
1

私はGreasemonkeyを使用してウェブサイト上でsetIntervalを変更しようとしています。私のコードは次のようになります:javascript:setintervalにオブジェクトを渡すサイト

// @run-at   document-start 

(function() { 
    var clearIntervalOriginal = unsafeWindow.clearInterval; 
    unsafeWindow.clearInterval = function(foo) { 
     GM_log(typeof foo + ":" + foo) 
     clearIntervalOriginal(foo); 
    } 
}()); 

websiteです。

コンソールログを見ると、間隔ID番号が表示されず、代わりにfooがオブジェクトであることがわかります。サイトのソースを見て、私はこれが使用され、関連するコードだと思う:

//yahoo code 
i.tid=c.setInterval(function(){ 
    if(i.done){ 
     c.clearTimeout(i.tid); 
     i.rec=[i.t_render-h,i.t_jsload-h,i.t_jsinit-h,i.t_jsend-h,i.t_jsend-i.t_jsinit] 
    } 
},f); 

私はfooオブジェクトからインターバルID番号を取得できますか?

+0

あなたはどのような 'console.log'出力を見ることができるものです。それが何であれ、それはあなた自身のために答えるのは簡単なことです。 –

+0

2番目のコードの 'c'は何を参照していますか?最初のビットでは、 'clearInterval'が置き換えられます(これは良い戦略ではありません)。その後、' clearTimeout'が呼び出されます。それは意図されていますか? Nickによると、タイマーリファレンスは 'i.tid'にあるので、それを取り消す必要があります。 – RobG

答えて

0

あなたのコードを間違って読んでいますか、またはあなたのclearIntervalOriginal関数が再帰的に自身を広告無限と呼んでいますか?

ヤフーコードでは、i.tidはインターバルIDです。インターバルをキャンセルする場合は、そのIDを指定する必要があります。たとえば:

clearInterval(i.tid); 

https://developer.mozilla.org/en/DOM/window.clearInterval

関連する問題