2

药膏!当我在我的插件上尝试 Mozilla 的验证器时,它得到以下与我对剪贴板使用的处理相关的错误:

nsITransferable在 Gecko 16 中已更改。

警告:nsITransferable界面已更改,以更好地支持隐私浏览模式。实例化对象后,您应该在调用init任何其他函数之前调用其上的函数。有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Using_the_Clipboard

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
if ('init' in trans){ trans.init(null);};

我无法理解这一点。

这是我的代码 - 我显然在调用trans.init

var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
if (!clip) return "";

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
if ('init' in trans){ trans.init(null);};  //<--IT DOESN'T LIKE THIS
if (!trans) return false;
trans.addDataFlavor("text/unicode");

我还尝试了TransferableMozilla示例中的功能,但得到了相同的非验证报告。

Mozilla AMO 的一位编辑告诉我要准确地写这个,但它仍然没有验证。

我也试过了,简单地说:

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
trans.init(null);   //<---LOOK HERE
if (!trans) return false;
trans.addDataFlavor("text/unicode");

验证器不报告任何错误 - 只是这个警告。一切正常。Mozilla 更新了他们的 Gecko 引擎,他们希望开发人员能够适应新标准。

在我的使用中,我们也希望能够使用可能从应用程序外部获取的剪贴板内容,因此我们确实希望使用 init 来调用 init 函数,null而不是window.

任何建议都会很棒!

4

1 回答 1

2

trans.init(null)在某些情况下有效,例如您的情况。如果在错误的情况下使用它也可能导致隐私泄露,因此验证器将其所有使用标记为可能需要更改。因此,在这种情况下,您可以忽略此警告。

于 2013-02-14T15:44:00.943 回答