2011-07-27 25 views
1

我目前正在重寫一個firefox擴展,僅在我的公司內部使用。我開始時將大部分邏輯轉移到通過xul覆蓋中的腳本標記加載的外部js文件中。 (我們發現很難讓員工持續升級,所以我想我可以解決這個問題)。它好工作是這樣的:從Firefox擴展中加載外部腳本

<overlay id="my-overlay" 
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
xmlns:html="http://www.w3.org/1999/xhtml"> 
<script type="application/x-javascript" src="https://my.company.com/path/to/jquery.min.js/> 
<script type="application/x-javascript" src="https://my.company.com/path/to/toolbar/main.js"/> 

<toolbox id="navigator-toolbox"> 

    <!-- some stuff here --> 

</toolbox> 

但後來我不得不動態加載腳本文件,這樣我可以使用首選項來確定它是否會從生產服務器或α/β加載的瘋狂念頭服務器。那是我慘敗的時候。

我已經試過以下失敗:

  • $阿賈克斯({數據類型: '劇本',...})//似乎什麼都不做,
  • $( '覆蓋') .appendChild(「」,{源:...})//腳本標籤添加,但不執行
  • document.createElementNS, etc //腳本添加標籤,但不執行
  • Components.utils.import //不接受http協議
  • mozIJSSubScriptLoader // does不接受HTTP協議

我沒有嘗試Components.utils.evalInSandbox但考慮到其限制,恐怕就需要顯著其他代碼更改,將不值得開發週期的輕微簡化。

從閱讀更多的mozilla文檔和bug看來,基本上我試圖做的是打破各種安全問題(我原則上理解,但當然在我的情況下,我完全控制兩端)。

困擾我的事情是,只要硬編碼腳本標記,它似乎工作正常,但只有當我嘗試動態生成腳本標記時纔會失敗。我應該只是折騰一下,或者是否有人知道如何做這個工作?

回答

1

您是否嘗試過使用XMLHttpRequest讀取文件的蠻力方法,然後調用eval()來運行它?從安全角度來看,這看起來很可怕,但正如你所說,使用帶有HTTP源URL的腳本標記基本上是同樣的事情。

+0

有趣的是,我很習慣避免評估它從未發生過我作爲一個選項。 –