我寫了一個userscript,並在Greasemonkey 0.9.13中運行它。不帶try塊的代碼會拋出異常。但是用block,它不會
如果我刪除的唯一try... catch
塊(行54-66),但保持裏面的代碼,它會拋出異常,如下圖所示:
未捕獲的異常:[異常...「不支持操作「代碼: 」9「 nsresult: 」0x80530009(NS_ERROR_DOM_NOT_SUPPORTED_ERR)「 位置: 」資源://greasemonkey/runScript.js行:29「]
然而,剝離的腳本在Chrome運行良好的w/o任何問題。
但是,它會不是打印任何東西到控制檯,這意味着在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);
}
好的,我確定'for'循環的結束條件,並且問題似乎是固定的。我深入研究,發現'div.stream-loading'元素可能是原因。但是,我不太明白爲什麼它可以在Chrome上運行?由於我忽略'div.stream-loading'的高度,因此它可能會在Chrome中破壞腳本。 – ayanamist 2012-01-03 19:31:16
Chrome可能會立即報告變化的高度,因爲代碼看起來像是預期的那樣,但FF中可能會有小的延遲。這是在twitter上測試的一個主要的痛苦(一個有很多FUBAR JS的視域),所以我在這裏做了一個有根據的猜測。 – 2012-01-03 20:41:15
這可能是原因。謝謝。 – ayanamist 2012-01-04 04:17:15