2012-01-03 7 views
1

私はuserscriptを書いて、Greasemonkey 0.9.13でそれを実行していません。tryブロックを使用しないコードは例外をスローします。しかし、ブロックでは、それは

私だけtry... catchブロック(ライン54-66)を除去するが、それは以下のような例外がスローされます、その中にコードを維持した場合:

キャッチされない例外:[例外...「の操作がサポートされていません。 「コード: "9" nsresult: "0x80530009(NS_ERROR_DOM_NOT_SUPPORTED_ERR)" 場所: "リソース://greasemonkey/runScript.jsライン:29"]

しかし、剥離スクリプトは、W/O Chromeでよく実行問題がある。

しかし、NOTコンソールには何も印刷されません。つまり、tryブロックのコードはtryブロックでラップされても例外をスローしません。

あなたは私にその理由を教えてもらえますか?

これはそのlinked sourceからコードスニペットです:

var streamItems = $('div.main-content div.stream-item'); 
var streamItemsLength = streamItems.length; 
var innerHeight = window.innerHeight; 
var scrollY = window.scrollY; 
var y = scrollY + innerHeight; 
var tweet; 
var tweetHeight = 0; 
try { 
    for (var sumHeight = getHeaderHeight(), num = 0; sumHeight < y; num++, sumHeight += tweetHeight) { 
    tweet = streamItems[num]; 
    tweetHeight = getHeight(tweet); 
    if (tweetHeight == 0) { 
     removeClass(tweet, 'hidden-tweet'); 
     tweetHeight = getHeight(tweet); 
    } 
    } 
} 
catch (e) { 
    console.log(e.stack); 
} 

答えて

1

このスクリプトは、(それはしばしばstreamItems配列をオーバーランしてhidden-tweetクラスを削除するときに、おそらく競合状態を持っています)(あなたが見ることができるように)tryブロックを必要とします。

あなたはChromeに例外をスローしませんが、これはちょうど偶然のようです。適切な条件では、Chromeでも失敗するか、Chromeのノード操作では十分に違いがあります。それは問題ではない、コードは貧しいです。

コンソールに何も印刷していないのは間違いありませんか?私のテストではそうです。

ただし、匿名関数ラッパーとイベントリスナーの間で、エラーstackが空であるように見えることがあります。

+0

OK、私は 'for'ループの終了条件を修正しましたが、問題は修正されているようです。そして、私はそれを掘り下げ、 'div.stream-loading'要素が原因かもしれないことを発見します。しかし、なぜChromeで動作するのか分かりません。私は 'div.stream-loading'の高さを無視するので、Chromeでスクリプトを壊すこともあります。 – ayanamist

+0

コードが予想通りに変更された高さがChromeによって報告されることがありますが、FFではわずかな遅延が生じることがあります。これはtwitter(FUBAR JSがたくさんある視力)でテストするのが大変なので、私はここで教育的な推測をしています。 –

+0

これが原因である可能性があります。ありがとうございました。 – ayanamist

0

我々はすべてのエラーをキャッチするためのtry/catchを使用するには、tryブロックにあるコードで起こりました。要件に基づいて、catchブロックにコードを追加することで、メッセージを抑制(または警告)するかどうかを決定できます。アラートを追加して、デバッグ目的のメッセージを表示することができます。

例外メッセージに基づいて、サポートされていないDOMオブジェクトに対して操作(メソッド/関数呼び出し)を実行しているようです。コードを再訪して、実行している関数呼び出しがサポートされていることを確認する必要があります。 forループのロジックが非常に悪いため

関連する問題