2012-08-24 60 views
0

我正在嘗試爲Firefox和Chrome編寫跨瀏覽器擴展。 Firefox使用commonJS規範,Chrome只是將所有內容整合到全局名稱空間中,如網頁。有條件地要求commonJS AMD模塊代碼

爲了能夠編寫可重用代碼,我試圖在Chrome擴展中使用requireJS來存放代碼,這樣我就可以編寫commonJS模塊,並讓它們在兩種環境中都能正常工作。

當我需要有條件地需要模塊時,我遇到了一個問題。例如,Firefox可以訪問您應該用來訪問本地存儲的simple-storage模塊。在Chrome中,我需要使用它們提供的localStorage API。所以,我一直在試圖做到這一點:

​​

但是,這似乎並不奏效。當我嘗試加載Chrome擴展我得到以下錯誤:

Chrome error

是否有需要有後備的模塊更好的辦法?

+0

不一定完全與此有關,但「最終」將無論try塊是否引發異常,都要運行。所以即使你的try塊通過,finally塊也會覆蓋store。那是你想要的嗎?如果沒有,我相信一個嘗試/抓住就是你所追求的。 –

+0

如果你的try塊會拋出一個錯誤,finally塊會被執行,並在錯誤被重新拋出之後 – Esailija

+0

ops抱歉,我的意思是catch。無論哪種方式,結果都是一樣的。 –

回答

0

有兩點需要說明這裏:如果Chrome運行

// detects webKit (chrome, safari, etc..) 
var isChrome = 'webKitTransform' in document.documentElement.style 

2)Requirejs將解析define()功能和搜索require('module')電話

1)檢測。爲了防止在Chrome的錯誤,你必須以某種方式,當requirejs解析函數體不承認該呼叫爲模塊依賴寫require

if (isChrome) 
    // use localStorage 
else { 
    // set the module name in a var does the trick, 
    // so requirejs will not try to load this module on chrome. 
    var ffStorageModule = 'simple-storage'; 
    return require(ffStorageModule); 
} 
+0

模塊'simple-storage'需要先加載,否則會出現類似的錯誤:'''Uncaught Error:模塊名稱「simple-storage」尚未加載上下文:'''' – sebarmeli

相關問題