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

How do I use the Dom File API from privileged code?

我正在开发一个无需重启的 firefox 插件。使用 firefox 开发者版 v36。 MDN page on the Dom File API 声称您可以将 File 导入为:

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

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

new contentWindow.File( filename )

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

欢迎提供任何线索,谢谢

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 )

这两种方法都是一种变通方法,因为它们意味着您需要加载 window。目前我们发现如果没有 window.

就无法获得它的接口

试试这个:

Cu.importGlobalProperties(["File"]);

MDN :: Components.utils.importGlobalProperties