我写了一个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