Firefox addon 如何从数据中的HTML文件引用Lib中的JavaScript文件?

Firefox addon 如何从数据中的HTML文件引用Lib中的JavaScript文件?,firefox-addon,directory-structure,firefox-addon-sdk,Firefox Addon,Directory Structure,Firefox Addon Sdk,我决定试一试。我的目录结构如下所示: 问题是文件popup.html需要引用stackapi.js。但我完全不知道该怎么做。翻阅Mozilla文档,似乎有一种方法可以做相反的事情: var data = require("self").data; var url_of_popup = data.url("popup.html"); 这允许Lib中的脚本访问data中的数据文件。但是我需要做相反的事情。在使用附加SDK构建的附加组件中(构建器只是SDK的web界面),网页无法直接访问扩展模块-

我决定试一试。我的目录结构如下所示:

问题是文件
popup.html
需要引用
stackapi.js
。但我完全不知道该怎么做。翻阅Mozilla文档,似乎有一种方法可以做相反的事情:

var data = require("self").data;
var url_of_popup = data.url("popup.html");

这允许Lib中的脚本访问data中的数据文件。但是我需要做相反的事情。

在使用附加SDK构建的附加组件中(构建器只是SDK的web界面),网页无法直接访问扩展模块-它们没有必要的权限。如果您只需要从网页中包含一个JavaScript文件,那么您应该将该文件放入
data
目录中。但是,它没有任何特权(比如能够调用
require()


你不会告诉我你是如何使用popup.html的,但我想这是一个很好的例子。如果希望该页面与附加组件通信,则需要使用内容脚本。将内容脚本文件放入
data
目录,通过
contentScriptFile
参数将其分配给面板。请参阅,内容脚本将能够使用
self.postMessage()
向扩展发送消息,扩展可以执行必要的操作并发送一条消息。

您可以通过从
/data
文件夹向上导航,然后向下导航
/lib
文件夹,获得
stackapi.js
文件的url,如下所示:

var url=require("sdk/self").data.url("../lib/stackapi.js");
然后在将脚本附加到我假设的
popup.html
时,在
contentScriptFile
参数中使用该资源url

您需要检查当前所处的环境,以确定是否需要添加对
exports
对象的任何引用,以便从加载项中访问它们

if(typeof(exports)!="undefined"){
  exports.something=function(){...};
}

不得不经历同样的场景,但jongo45的解决方案似乎不再有效。不知怎么找到了一个对我有效的解决办法。张贴在下面,因为它可能会帮助有需要的人

下面的代码获取“lib/subdir”下所有文件的列表


。/Lib/what have you.js
不行吗?@JonPurdy:不行,不行。显然,
popup.html
位于根目录中。从Firefox 31开始,只有当FF从SDK的cfx启动时,这种攻击才有效。一旦加载项打包到xpi中,FF就无法找到从“/data”移动到“/lib”的库。
const fileIO = require("sdk/io/file");    
const fspath = require("sdk/fs/path");
const {Cc, Ci} = require("chrome");

const currDir = Cc["@mozilla.org/file/directory_service;1"]
            .getService(Ci.nsIDirectoryServiceProvider)
            .getFile("CurWorkD", {}).path;

const listOfFiles = fileIO.list(fspath.resolve(currDir,'lib/subdir'));