2014-11-01 58 views
1

我想從頁面加載js文件並要求它在後臺頁面中。我怎樣才能要求數據文件夾中的腳本

我嘗試在lib和數據文件夾中使用兩個副本,但有複習問題。

我可以從頁面中的lib文件夾加載它,但它不適合其他瀏覽器。

我可以通過加載器加載:

mono = require('toolkit/loader').main(require('toolkit/loader').Loader({ 
    paths: { 
     'sdk/': 'resource://gre/modules/commonjs/sdk/', 
     'data/': self.data.url('js/'), 
     '': 'resource:///modules/' 
    }, 
    name: self.name, 
    prefixURI: 'resource://'+self.id.slice(1, -1)+'/' 
}), "data/mono"); 

但是有問題:

require('net/xhr').XMLHttpRequest 

我嘗試選擇它的使用,但有同樣的問題。

require('@loader/options') 

現在我使用它,但都需要通過我的論點發送對象。

有想法嗎?

upd 現在我使用這段代碼,它允許需要模塊,並且不會將它存儲在內存中,正如我想的那樣。但需要先聲明所有模塊。

mono = require('toolkit/loader').main(require('toolkit/loader').Loader({ 
    paths: { 
     'data/': self.data.url('js/') 
    }, 
    name: self.name, 
    prefixURI: 'resource://'+self.id.slice(1, -1)+'/', 
    globals: { 
     console: console, 
     _require: function(path) { 
      switch (path) { 
       case 'sdk/timers': 
        return require('sdk/timers'); 
       case 'sdk/simple-storage': 
        return require('sdk/simple-storage'); 
       case 'sdk/window/utils': 
        return require('sdk/window/utils'); 
       case 'sdk/self': 
        return require('sdk/self'); 
       default: 
        console.log('Module not found!', path); 
      } 
     } 
    } 
}), "data/mono"); 

回答

0

我覺得從erikvold我這篇文章可以解決您所面臨的問題:http://work.erikvold.com/jetpack/2014/09/23/jp-pro-tip-reusing-js.html

+0

它只能用於NPM包或其他庫。但是如果我需要從數據文件夾中加載js,則它不起作用。問題沒有解決方案,因爲在構建xpi時都需要聲明。 – user84531 2014-11-05 05:38:22

+0

user84531:解決問題的方法與描述的相同,將js庫放在lib文件夾中,以便它可以通過模塊加載。然後,您可以像數據文件夾中的文件一樣加載相同的文件。 – humanoid 2014-11-14 11:30:17

+0

人型生物:是我寫的「我可以從頁面的lib文件夾中加載它,但對其他瀏覽器不太舒服。」 – user84531 2014-11-24 02:38:48