从firefox扩展中加载外部脚本

时间:2011-07-27 03:53:32

标签: javascript dynamic firefox-addon external

我目前正在重写一个firefox扩展,只能在我公司内部使用。我开始将大部分逻辑移动到通过xul覆盖内的脚本标记加载的外部js文件中。 (我们发现很难让我们的员工不断升级,所以我想我可以解决这个问题)。它工作得很好:

<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>

但后来我有了动态加载脚本文件的疯狂想法,以便我可以使用首选项来确定它是从生产服务器还是alpha / beta服务器加载。那是我悲惨失败的时候。

我尝试了以下尝试失败:

  • $ .ajax({dataType:'script',...})//似乎什么都不做
  • $('overlay')。appendChild('',{src:...})//脚本标签已添加但未执行
  • document.createElementNS, etc //已添加脚本标记但未执行
  • Components.utils.import //不接受http协议
  • mozIJSSubScriptLoader //不接受http协议

我没有尝试Components.utils.evalInSandbox但是考虑到它的限制,我担心它需要进行大量的其他代码更改,这些更改不值得开发周期的轻微简化。

从阅读更多的mozilla文档和错误看来,基本上我正在尝试做的是打破各种安全问题(我原则上理解但当然在我的情况下,我完全控制两端)。< / p>

困扰我的是,只要我对脚本标记进行硬编码,但只有在我尝试动态生成脚本标记时才会失败。我应该只是拉扯或者是否有人知道如何使这项工作?

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用XMLHttpRequest读取文件的暴力方法,然后调用eval()来运行它?从表面上看,从安全角度来看,这似乎很可怕,但正如您所说,使用带有HTTP源URL的脚本标记基本上是相同的。