【问题标题】:including a js file in bootstrap.js firefox for android extension在 bootstrap.js firefox 中包含一个用于 android 扩展的 js 文件
【发布时间】:2013-08-12 11:48:25
【问题描述】:

我正在开发适用于 android 的 firefox 的引导扩展,我想将 js 文件导入 bootstap.js(例如在 xul 扩展中导入组件)。引导扩展不允许使用 chrome.manifest to use a resource alia 的经典方法。我尝试了 Erik Vold 的这段代码,但它似乎不起作用

function startup(data) AddonManager.getAddonByID(data.id, function(addon) {
// Include some utility functions
include(addon.getResourceURI("includes/scanner.js").spec);
});

非常感谢您的帮助并感谢您。

【问题讨论】:

    标签: android import firefox-addon firefox-addon-restartless


    【解决方案1】:

    实际上,content is supported 在很长一段时间以来一直在引导加载项中(首先在 Gecko 8 中,从 Gecko 10 开始,它会自动加载清单,IIRC)。 您可以从 chrome://yourpackage/content/... 加载 js 代码模块,而不仅仅是从资源 URI(从 Gecko 4、IIRC 开始)。因此,没有什么能阻止您使用 mozilla 风格的代码模块。 此外,还有几个附加组件manually add resource substitutions

    Erik 写的东西使用 a custom include function,在相应的 bootstrap.js 中使用 loadSubScript 实现。这也是一种选择。这个方案是在还不能正确使用引导加载项中的 js 代码模块时发明的,例如因为还没有Cu.unload

    使用content + Cu.import + Cu.unload 可能是最简单的方法。

    我自己的附加组件之一(桌面 + Android)中的真实示例(附加组件的其余部分是使用自定义 commonjs 样式 require 加载器编写的,所以不要因此而分心)。

    【讨论】:

    • nmaier 感谢您的回复,这是我做事的方式,我不知道我在哪里犯了错误(trackdetect 是我的扩展程序的 id):在 chrome.manifest 我写道: bootstrap.js 中的内容 trackdetect chrome/includes/: Cu.import("chrome://trackdetect/includes/scanner.js");再次感谢。
    • content something somedir 将在chrome://something/content/ 下注册 somedir 的内容。因此somedir/somefile.js 将作为chrome://something/content/somefile.js 提供。在您的情况下:chrome/includes/scanner.js 将在 chrome://trackdetect/content/scanner.js 可用。您可以参考已经链接的文档以获取更多信息。
    • 抱歉这么久才回复你的答案,我按照你的解释做了修改,但我收到了这个错误:E/GeckoConsole(22534): No chrome package registered for chrome://trackdetect /content/scanner.js 一开始以为是打包文件夹有问题,但是解压一个打包好的扩展后,发现文件夹在那里。所以,我真的不知道问题的根源是什么,也许导入不支持“chrome://”?我想手动加载资源,但老实说,有部分(以前建议的)代码我不明白。
    • 您的代码是否可以通过网络访问,以便我查看?
    • 好吧,我知道这完全不合适,我真的很讨厌问你这个问题,但我可以私下发给你吗?因为,它无法通过网络访问。如果您拒绝或该网站的管理员拒绝,我会完全理解。真的很抱歉。
    【解决方案2】:

    我找到了这样做的方法:

        var IncludedFile={};
        Services.scriptloader.loadSubScript(aData.resourceURI.spec + "content/fileName.js", IncludedFile);
    

    然后你可以访问这样的方法:

        IncludedFile.someFunction;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多