gpt4 book ai didi

firefox - 升级插件以与 Firefox 4.0 兼容,但也尝试使其与 3.x 兼容。建议?

转载 作者:行者123 更新时间:2023-12-02 14:54:22 30 4
gpt4 key购买 nike

我有一个为 Firefox 3.6 编写的附加组件,现在我正在将其升级到 Firefox 4.0,同时尝试使其与 3.6 兼容。有没有人有尝试这样做的经验,或者关于如何在代码变得太意大利面条式的情况下做到这一点的技巧?

在某些地方,保持它与两个版本兼容意味着要做这样的事情:

.myAddonClass {
-moz-background-size: 100% 100%; /* Fx 3.x */
background-size: 100% 100%; /* Fx 4.x */
}

这会在两个版本中产生 CSS 警告。我可以忍受这一点。我还在其他地方做类似的事情:

/** get the current version of this addon */
function getVersion() {
var version;
if (Application.extensions) { // Fx 3.x
version = Application.extensions.get('myaddon@example.com').version;
}
else { // Fx 4.x
Components.utils.import('resource://gre/modules/AddonManager.jsm');
AddonManager.getAddonByID('myaddon@example.com', function(addon) {
version = addon.version;
});
sleepUntil(function() {
return version;
}
}
return version;
}

(其中 sleepUntil 是一个使用 Thread.processNextEvent technique 的实用函数)

检查是否定义了 Application.extensions 似乎比直接检查 Application.version 字符串更干净,但这种方法可能存在一些我不知道的缺陷关于?

我在尝试将内容插入网页时也遇到了问题。在一种情况下,doc.body.appendChild 在 3.x 中工作,但在 4.x 中不行,所以我尝试这样做:

try { // Fx 3.x
doc.body.appendChild(myElement);
}
catch (e) { // Fx 4.x
let span = doc.createElement('span');
doc.body.appendChild(span);
span.innerHTML = outerHTML(myElement);
}

上面的代码不起作用,但如果我在 doc.body.appendChild(myElement) 之前插入 throw new Error('') ,那么它就会起作用工作,表明在 Firefox 4 中,appendChild 调用显然会在抛出错误之前以某种方式修改 myElement。我确信我可以弄清楚如何让这个特定的代码片段工作,但我担心我还会遇到更多这样的问题,所以我想看看其他人是否已经经历过类似的过程,并且有我应该注意的任何提示。

很抱歉问了这么长的问题。 这就是我真正要问的:

  1. 对于尝试让插件同时兼容 Firefox 3 和 Firefox 4,您有什么建议?
  2. 对于代码分支以便我们有一个 3.x 版本和另一个 4.x 版本的想法,您有何看法?然后,我们必须将所有新功能应用到两个版本,并在两个版本中进行测试,等等。
  3. 一般来说,测试是否存在您想要的特定功能(就像我使用 if (Application.extensions) ... 或 try/catch 所做的那样)或仅检查是否更好Application.version 是以“3”还是“4”开头?

最佳答案

What advice do you have for trying to keep an addon compatible with both Firefox 3 and Firefox 4 at the same time?

我建议为两个最新的主要版本使用单个 XPI。使用旧版本的人是一个失败的案例,并且为不同的“事件”版本提供两个 XPI 会令人困惑(我最近没有尝试过 AMO 呈现此方式的方式,但这是我的旧印象)。

What do you think about the idea of branching the code so that we have one version for 3.x and another for 4.x? We would then have to apply any new features to both versions, and test them in both versions, etc.

只有当代码变得太意大利面条时我才会这样做。作为一名爱好者,我会停止更新旧版本,将其留给使用旧​​ Firefox 版本的人使用。您可以在 AMO 上查看扩展程序的统计信息,以检查新版 Firefox 的采用率(即使统计信息页面不太好用。)

In general, is it better to test for the presence of the specific feature you want (like I did with if (Application.extensions) ... or try/catch) or to just check whether Application.version starts with '3' or '4'?

基于功能的分支在这里并不重要,因为您处理的是一组固定的主机应用程序,与网页不同。

但请记住可能的副作用:

  • 检查应用的版本会使移植到其他应用变得更加困难,因此,如果您的部分代码仅使用平台功能,而不是特定应用的功能,那么测试平台版本会更有意义。
  • try..catch 还可以捕获与您期望的错误无关的其他错误。我会避免它。

附注

1) 为了避免有关未知属性的 CSS 警告(如果有很多),您可以通过 appversion in chrome.manifest 对不同版本使用不同的样式。

2) 我认为 Thread.processNextEvent 技术很危险,因为它会阻止调用堆栈展开,直到您完成为止。

关于firefox - 升级插件以与 Firefox 4.0 兼容,但也尝试使其与 3.x 兼容。建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475060/

30 4 0
文章推荐: angularjs - Angular ui.bootstrap 分页 - 当前页面不更新/ watch 不工作
文章推荐: javascript - jQuery 无法识别该类已更改,但浏览器可以识别
文章推荐: javascript - 使用 javascript 将类添加到除
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com