Google chrome Firefox、Safari、IE的端口Chrome扩展

Google chrome Firefox、Safari、IE的端口Chrome扩展,google-chrome,internet-explorer,firefox,google-chrome-extension,safari,Google Chrome,Internet Explorer,Firefox,Google Chrome Extension,Safari,我想开始做一个跨浏览器扩展。我知道每个浏览器的所有API和结构都是不同的,但是有没有通用的做法可以遵循 我搜索了Stackoverflow,没有一个问题提供了生成跨浏览器扩展的通用解决方案。根据我的经验,最好的解决方案是使用将调用浏览器api的adapters类。之后,通过使用正确的适配器,您就可以拥有一个可以在每个浏览器上运行的代码 例如,在后台脚本中,firefox没有setTimeout/setInterval,但chrome有setTimeout/setInterval。你可以有这样的代

我想开始做一个跨浏览器扩展。我知道每个浏览器的所有API和结构都是不同的,但是有没有通用的做法可以遵循


我搜索了Stackoverflow,没有一个问题提供了生成跨浏览器扩展的通用解决方案。

根据我的经验,最好的解决方案是使用将调用浏览器api的adapters类。之后,通过使用正确的适配器,您就可以拥有一个可以在每个浏览器上运行的代码

例如,在后台脚本中,firefox没有setTimeout/setInterval,但chrome有setTimeout/setInterval。你可以有这样的代码

Core.js

this._browserAdapter.setTimeout(function(){...}, 1000);
setTimeout: function (callback, time) {
        return setTimeout(callback, time);
}
setTimeout: function(callback, time) {

        var {setTimeout} = require("sdk/timers");
        return setTimeout(callback, time);
},
ChromeAdapter.js

this._browserAdapter.setTimeout(function(){...}, 1000);
setTimeout: function (callback, time) {
        return setTimeout(callback, time);
}
setTimeout: function(callback, time) {

        var {setTimeout} = require("sdk/timers");
        return setTimeout(callback, time);
},
FirefoxAdapter.js

this._browserAdapter.setTimeout(function(){...}, 1000);
setTimeout: function (callback, time) {
        return setTimeout(callback, time);
}
setTimeout: function(callback, time) {

        var {setTimeout} = require("sdk/timers");
        return setTimeout(callback, time);
},
您可以用这种方式做任何事情,因此您将能够拥有90%以上的代码共同点


编辑


它将适用于firefox和safari。对于IE来说,这是完全不同的,但是有了新的微软EDGE,我认为有可能有这样的东西。等着瞧

也许是因为没有普遍的解决办法?此外,这里的主题可能是“询问我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题”。好的,你是对的。然后我关闭它。这是我在这里提出的相同解决方案。确保获得所有内容有点困难,但我们使用UMD JS()模块格式来构造代码。我们使用RequireJS()在Chrome中加载模块,而Firefox扩展使用Mozilla的通用JS实现。