如何从特权代码使用 Dom 文件 API



我正在开发一个无需重启的火狐插件。使用 Firefox 开发者版 v36。Dom File API 上的 MDN 页面声称您可以将File导入为:

const {File, Services} = Cu.import('resource://gre/modules/Services.jsm', {});

但是 Services.jsm 显然不会导出文件对象。我也试过:

new contentWindow.File( filename )

但这给出了一个非常描述性的NS_ERROR_FAILURE。

欢迎任何线索,谢谢

试试这个:

Cu.importGlobalProperties(["File"]);

MDN :: Components.utils.importGlobalProperties

Noitidart 找到了解决方法:

const { Services } = Cu.import('resource://gre/modules/Services.jsm', {})
// And you're holding on to the constructor straight away
//
var domfile = Services.appShell.hiddenDOMWindow.File( filename )

我同时找到了另一种解决方法:

// Where window is a contentWindow.
//
var domWindowUtils = window.QueryInterface( Ci.nsIInterfaceRequestor)
                     .getInterface( Ci.nsIDOMWindowUtils)
var FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils
var nsifile = new FileUtils.File( fileName )
var domfile = domWindowUtils.wrapDOMFile( nsifile )

这两种方法都是一种解决方法,因为它们意味着您需要一个加载的窗口。目前,我们发现没有窗口就无法获得接口。

最新更新