【问题标题】:Firefox nsITransactionListener, preventing willDo/didDo from happeningFirefox nsITransactionListener,防止 willDo/didDo 发生
【发布时间】:2014-04-28 10:37:02
【问题描述】:

我正在听 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");
}

【问题讨论】:

    标签: javascript firefox xpcom


    【解决方案1】:

    willDo 返回一个boolean,当true 将中断事务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-15
      • 2013-03-25
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多