药膏!当我在我的插件上尝试Mozilla的Validator时,会出现与我对剪贴板使用的处理相关的以下错误:
Gecko 16中已经更改了
nsITransferable
。警告:
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");
我还尝试了Mozilla的example here中的Transferable
函数,但获得了相同的非验证报告。
其中一位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引擎,他们希望devlopers能够匹配新标准。
在我的使用中,我们希望能够使用可能从应用程序外部获取的剪贴板内容,因此我们确实希望使用null
而不是{{1来调用init函数}}
任何建议都会很棒!
答案 0 :(得分:2)
trans.init(null)
在某些情况下有效,例如你的。如果在错误的情况下使用它也会导致隐私泄露,因此验证器会将其所有使用标记为可能需要更改。因此,在这种情况下,您可以忽略这一警告。