Firefox 不带try块的代码将引发异常。但有了布洛克,它赢了';T

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中运行良好,没有任何问题 但是,它不会将任何内容打印到控制台中,这

我已经编写了一个,并在Greasemonkey 0.9.13中运行它

如果我删除了唯一的
尝试。。。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);
}