药膏!当我在我的插件上尝试 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");
我还尝试了Transferable
Mozilla示例中的功能,但得到了相同的非验证报告。
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
.
任何建议都会很棒!