小编Geo*_*off的帖子

如何在Javascript中重新抛出异常,但保留堆栈?

在Javascript中,假设我想在异常发生时执行一些清理,但让异常继续向上传播,例如:

try {
  enterAwesomeMode();
  doRiskyStuff(); // might throw an exception
} catch (e) {
  leaveAwesomeMode();
  throw e;
}
doMoreStuff();
leaveAwesomeMode();
Run Code Online (Sandbox Code Playgroud)

这段代码的问题在于捕获和重新抛出异常会导致到那一点的堆栈跟踪信息丢失,因此如果随后再次捕获异常,堆栈上的堆栈更高,堆栈跟踪只会下降到re -扔.这很糟糕,因为它意味着它不包含实际抛出异常的函数.

事实证明,try..finally具有相同的行为,至少在Chrome中(也就是说,它不是精确地重新抛出问题,而是存在任何异常处理程序块.)

有没有人知道在Javascript中重新抛出异常但保留与之关联的堆栈跟踪的方法?如果不这样做,那么建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪?

感谢任何指针:)

javascript callstack exception-handling exception stack-trace

139
推荐指数
3
解决办法
4万
查看次数

如何找到位于给定(X,Y)位置的DOM节点?(命中测试)

我有一个HTML文档中一个点的坐标(X,Y).如何确定那些坐标处的DOM节点?

一些想法:

  • 是否有一个我错过的DOM命中测试函数,它需要一个点(X,Y)并返回那里的DOM元素?
  • 有没有一种有效的方法来遍历DOM元素树来查找包含元素?由于绝对定位的元素,这似乎很棘手.
  • 有没有办法模拟给定(X,Y)位置的事件,以便浏览器最终创建一个具有指向该元素的指针的事件对象?

(背景:我将Qt的QWebView嵌入到本机应用程序中.我正在尝试根据鼠标结束的DOM节点改变Qt小部件提供的上下文菜单,但是Qt 4.5无法测试DOM元素,虽然这个功能来自4.6.所以我希望我可以将坐标放到Javascript中并使用DOM API进行命中测试.)

谢谢!

javascript qt dom hittest

22
推荐指数
1
解决办法
1万
查看次数

确定在Qt​​中触发了哪个菜单项

在Qt应用程序中,我有一堆自动创建的QActions(菜单项),我将其添加到菜单栏中的菜单中.每个打开一个不同的文件.我想将它们全部连接到同一个插槽,以免多次写入相同的代码.但是,从那个插槽中,我如何确定触发了哪些QAction?

(示例:在Cocoa中,我使用动作选择器中的sender参数执行此操作.)

谢谢!

qt

14
推荐指数
3
解决办法
1万
查看次数

鼠标离开浏览器窗口时的Javascript事件

我想在鼠标离开浏览器窗口时运行一些Javascript代码.我只需要支持Safari(WebKit.)

我尝试在窗口上放置一个mouseout处理程序.当鼠标离开浏览器窗口时,可以可靠地调用该处理程序.但是由于冒泡,当鼠标在文档中的元素之间移动时也会调用它.我无法弄清楚如何确定鼠标何时实际离开窗口以及何时仅在元素之间移动.

当鼠标离开窗口时,只生成一个事件,并且目标元素看起来是鼠标实际上的元素.因此,检查目标元素是窗口还是文档是不起作用的.并且将整个页面包装在一个不可见的包含div中也不起作用:如果div是不可见的,那么鼠标永远不会超过它,所以没有任何变化.

(如果我把处理程序放在document或document.body上会发生同样的事情,除了令人惊讶的document.body在鼠标进入或离开窗口的空白部分时没有鼠标悬停/鼠标输出事件,例如创建空的垂直空间通过绝对定位底部元素:0.对于该空间,文档和窗口将获得mouseover/mouseout事件,目标为<html>,但document.body不会.)

我有一些想法:

  • 在每个mouseout事件中,获取鼠标的实际位置,看看它是否实际上在窗口上.但我不知道这是否真的可行,听起来消除所有竞争条件会很棘手.
  • 同时注册一个鼠标悬停处理程序,并检测鼠标悬停未进行鼠标移除(或紧接着a)鼠标悬停的情况.但这需要一个计时器.

我们使用prototype.js,所以理想情况下我想用原型的Event.observe来表达解决方案,但我可以想出那部分.

谢谢你的任何建议!

javascript safari ajax mouseout prototypejs

11
推荐指数
2
解决办法
1万
查看次数

在Emacs中,如何在多个帧中打开相同的缓冲区(使用ido/iswitch时)?

在emacs中,我想在多个帧中打开相同的缓冲区.在我使用ido之前,这很容易:我只是在一帧中切换到缓冲区C-x b,然后将另一帧聚焦在我的窗口管理器中,然后再打开另一帧中的缓冲区(C-x b再次.)但是,现在我使用ido进行模糊完成C-x b,当我尝试打开缓冲区的第二个副本时,它只是将焦点发送回第一帧并让我感到沮丧.

我可以设置一个变量来控制这种行为吗?

理想情况下,我不想C-x b ENTER被其他打开的缓冲区所偏见(通常,它会尝试默认为在任何窗口中未打开的缓冲区.)

emacs elisp ido-mode

11
推荐指数
1
解决办法
954
查看次数

从浏览器插件(NPAPI)生成异步Javascript事件

我正在写一个网络浏览器插件(NPAPI.)

我的插件启动一个工作线程,随着工作进展,我想将事件传递回Javascript.但是由于NPAPI线程模型,工作线程直接回调到NPAPI是不合法的,因此工作线程不能调用Javascript.

对此的一个解决方案是NPN_PluginThreadAsyncCall函数.但这是一个相对较新的功能.例如,它仅支持Firefox 3.

有没有办法在不使用NPN_PluginThreadAsyncCall的情况下从NPAPI插件中获取异步事件传递/ javascript执行?在添加此功能之前,人们做了什么?

javascript browser plugins npapi

8
推荐指数
1
解决办法
4129
查看次数