2012-10-19 44 views
0

我使用使用requirejs的外部庫我不知道 它的工作如何,但FileError在其他瀏覽器 或FF8中的全局範圍內,但在FF 14/15中說FileError not defined.requirejs導出在Firefox中不起作用15

define(function (require, exports, module) { 
    "use strict"; 
    var Async = require("utils/Async"); 
    var NativeFileSystem = { 
    /** 
    * LOT OF CODE HERE 
    * ... 
    * ... 
    * ... 
    */  
    /** class: FileError 
    * 
    * Implementation of HTML file API error code return class. Note that we don't 
    * actually define the error codes here--we rely on the browser's built-in FileError 
    * class's constants. In other words, external clients of this API should always 
    * use FileError.<constant-name>, not NativeFileSystem.FileError.<constant-name>. 
    * 
    * @constructor 
    * @param {number} code The error code to return with this FileError. Must be 
    * one of the codes defined in the FileError class. 
    */ 
    NativeFileSystem.FileError = function (code) { 
     this.code = code || 0; 
    }; 
    /** 
    *THIS FIX THE PROBLEM BUT IT A HACK 
    *window.FileError = NativeFileSystem.FileError; 
    */ 
    // Define public API 
    exports.NativeFileSystem = NativeFileSystem; 
}); 

當然,如果我的 函數定義它的做工精細之後添加window.FileError = NativeFileSystem.FileError;。但我不想破解庫文件 The full source of the file is here

+0

我發現這個https://github.com/jrburke/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define#wiki-exports說屬性添加到' exports'對象將位於模塊的公共接口上,不需要返回任何值。 –

+0

這對我來說不是很清楚你如何試圖訪問'FileError'對象,也許你可以發佈一個實際拋出錯誤的代碼的例子。 –

+0

問題不是'FileError'實現的代碼更大,是必須在全局範圍內定義的,並且不是在所有瀏覽器中都是這樣做的,即庫爲從adobe-bracket項目嵌入的chrome創建,但requirejs是爲所有瀏覽器 –

回答

1

括號僅依賴於FileError類的錯誤代碼常量。

FileAPI仍然是一個草案規範http://www.w3.org/TR/FileAPI/並且它看起來在我們最初編寫NativeFileSystem的時候已經將FileError更改爲DOMError。我們可以刪除這個依賴關係,並定義我們自己的等價FileError常量來刪除依賴關係。我們試圖在FileAPI之後對API進行建模,但它一直是一個移動目標。