Firefox 不带try块的代码将引发异常。但有了布洛克,它赢了';T
我已经编写了一个,并在Greasemonkey 0.9.13中运行它 如果我删除了唯一的Firefox 不带try块的代码将引发异常。但有了布洛克,它赢了';T,firefox,greasemonkey,userscripts,Firefox,Greasemonkey,Userscripts,我已经编写了一个,并在Greasemonkey 0.9.13中运行它 如果我删除了唯一的尝试。。。catch块(第54-66行),但将代码保留在其中,它将抛出如下异常: 未捕获异常:[异常…“不支持操作”代码: “9”nsresult:“0x80530009(NS\u错误\u DOM\u不受支持\u错误)”位置: "resource://greasemonkey/runScript.js 第29行“] 然而,剥离脚本在Chrome中运行良好,没有任何问题 但是,它不会将任何内容打印到控制台中,这
尝试。。。catch
块(第54-66行),但将代码保留在其中,它将抛出如下异常:
未捕获异常:[异常…“不支持操作”代码:
“9”nsresult:“0x80530009(NS\u错误\u DOM\u不受支持\u错误)”位置:
"resource://greasemonkey/runScript.js 第29行“]
然而,剥离脚本在Chrome中运行良好,没有任何问题
但是,它不会将任何内容打印到控制台中,这意味着try块中的代码在被try块包装时不会抛出异常
你们能告诉我为什么它有效吗
这是其中的代码片段:
var streamItems=$('div.main-content div.stream-item');
var streamItemsLength=streamItems.length;
var innerHeight=window.innerHeight;
var scrollY=window.scrollY;
变量y=滚动+内部高度;
var-tweet;
高度=0;
试一试{
对于(var sumHeight=getHeaderHeight(),num=0;sumHeight
我们使用try/catch来捕获try块中代码中发生的任何错误。根据您的需求,您可以通过在catch块中添加一些代码来决定是否要抑制消息(或)向用户发出警报。您可以添加一些警报并查看用于调试的消息
根据异常消息,您似乎正在对不受支持的DOM对象执行操作(方法/函数调用),您需要重新查看代码,查看您正在执行的函数调用是否受支持。我们使用try/catch捕获try块中代码中发生的任何错误。根据您的需求,您可以通过在catch块中添加一些代码来决定是否要抑制消息(或)向用户发出警报。您可以添加一些警报并查看用于调试的消息
根据异常消息,您似乎正在对不受支持的DOM对象执行操作(方法/函数调用),您需要重新访问代码,查看您正在执行的函数调用是否受支持。该脚本需要
try
块(如您所见),因为for
循环的逻辑非常糟糕(它通常会溢出streamItems
数组,并且在删除隐藏tweet
类时可能存在争用条件)
你说它不会在Chrome中抛出异常,但看起来这只是偶然。如果条件合适,它在Chrome中也会失败——或者Chrome的节点操作已经足够不同了。没关系,代码很差
至于它没有在控制台上打印任何东西,你确定吗?在我的测试中是这样的
但有时在匿名函数包装器和事件侦听器之间,可能错误
堆栈
看起来是空的。该脚本需要try
块(如您所见),因为for
循环的逻辑非常糟糕(它通常会溢出streamItems
数组,并且在删除隐藏tweet
类时可能存在争用条件)
你说它不会在Chrome中抛出异常,但看起来这只是偶然。如果条件合适,它在Chrome中也会失败——或者Chrome的节点操作已经足够不同了。没关系,代码很差
至于它没有在控制台上打印任何东西,你确定吗?在我的测试中是这样的
但有时在匿名函数包装器和事件侦听器之间,可能错误
堆栈看起来是空的。好的,我为循环修复了的结束条件,问题似乎得到了解决。我深入研究,发现div.stream-loading
元素可能是原因。但是,我不太明白是什么原因它在Chrome上工作吗?由于我忽略了div.stream-loading
的高度,它也可能会破坏Chrome中的脚本。Chrome可能会像代码所期望的那样立即报告更改的高度,但FF可能会有一点延迟。这是在twitter上测试的一大难题(有很多FUBAR JS的场景),所以我在这里做了一个有根据的猜测。这可能是原因。谢谢。好吧,我修复了for
循环的结束条件,问题似乎已经解决了。我深入研究,发现div。流加载
元素可能是原因。但是,我不太明白它为什么在Chrome上工作?因为我忽略了div.strea的高度m-loading
,也可能会破坏Chrome中的脚本。Chrome可能会像代码预期的那样立即报告更改的高度,但FF中可能会有一点延迟。这是在twitter上测试的一大难题(有很多FUBAR JS),所以我在这里做一个有根据的猜测。这可能是原因。谢谢。
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);
}