如何从特权代码中使用 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"]);
我正在开发一个无需重启的 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"]);