Firefox nisTrans actionListener,防止Do / didDo发生

时间:2014-04-28 10:37:02

标签: javascript firefox xpcom

我正在听nsIHTMLEditor transactionManager并试图阻止contenteditable做一些我想要讨论的事情:

let transactionManager = {
   didDo: (aManager, aTransaction, aDoResult) => {},
   willDo: function (aManager, aTransaction) {}
   ...
}

nsIHTMLEditor.transactionManager.AddListener(transactionManager);

是否有办法阻止该交易,例如event.preventDefault。我可以使用aTransaction.undoTransaction();但不适用于willMerge并且似乎无法使用。

谢谢。

修改

感谢nmaier的回答,以防止您需要return true的交易。但是,在我目前的Firefox,29.1上,返回true会导致Firefox崩溃。通过抛出错误来管理:

willDo: function (aManager, aTransaction) {
  throw Components.Exception("Error message");
}

1 个答案:

答案 0 :(得分:0)

willDo返回boolean,当true将中断交易时。{/ p>

当在javascript中实现而不返回任何内容时,它将返回undefined,这将被强制转换为false,这就是您的代码首先工作的原因。 因此,如果您想阻止交易,只需从true返回willDo