如何将Greasemonkey脚本发布为Firefox插件?

7

我最近在Greasemonkey上编写了一个脚本,想将其发布为Firefox的插件。有什么简单的方法可以做到这一点吗?

2个回答

10

虽然你可以“编译”一个GreaseMonkey脚本(参见Brock的答案),但这种解决方案并不是得到很好支持的。更可靠的选择是使用Add-on SDKJPM 。你的lib/main.js文件可以非常简单(page-mod模块文档):

var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
  include: "*.example.com",
  contentScriptWhen: 'end',
  contentScriptFile: data.url("contentScript.js")
});

这相当于以下的 GreaseMonkey 脚本头:

// @include http://example.com/*
// @include http://*.example.com/*

然后,您将GreaseMonkey脚本添加为data/contentScript.js(Add-on SDK将忽略GreaseMonkey标头,该信息在其他地方指定),并构建扩展程序。在大多数情况下,它会正常工作-除非您的GreaseMonkey脚本使用任何特殊的GreaseMonkey API,否则您需要找到替代方法。unsafeWindow得到支持(通常适用警告)。


“不是完全支持”是什么意思?是指“不能/很少安装”还是“代码臃肿”? - Rob W
1
@RobW:我的意思是:“很久以前有人拼凑出来的古老解决方案,自那以后就没有真正更新过。” 它在许多方面都不太理想,比如需要浏览器重新启动才能安装扩展程序,但是没有人会去修复它。 - Wladimir Palant
1
我尝试编辑了这个脚本,但他们没有接受它。但是这个确切的脚本不再起作用了。我不得不根据Mozilla文档进行修改。var pageMod = require("sdk/page-mod"); var self = require("sdk/self"); pageMod.PageMod({ include: "*", contentScriptWhen: 'ready', contentScriptFile: [self.data.url("contentScript.js")] }); - trlkly
2
@trlkly:没错,SDK模块解析方式在一段时间前发生了改变 - 我已经修复了这个问题。其他更改是不必要的,它们可能根据您的操作有意义,但并非必须。 - Wladimir Palant
谢谢你修复它。但是@contentScriptWhen: 'end'还是不对。GreaseMonkey脚本默认从DOMContentLoaded开始执行,所以应该是@contentScriptWhen: 'ready' - trlkly

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接