javascript - 避免覆盖UI的一些方法(可能类似于firefox中的附加组件)

标签 javascript html css firefox-addon

我一直在研究一个嵌入式小部件(html、css、js),它每 x 秒接收一些文本,并根据正在安装的第 3 方附加组件解释该文本。它与 firefox 附加组件系统类似,只是大大简化了。 让我举个例子说明我正在努力实现的目标。 我为一个小部件提供了一个嵌入式代码,这样人们就可以把它放在他们的网站上,类似于 Twitter 更新小部件。我还提供了一个小的 api(在 javascript 中),以便人们可以创建一些扩展(附加组件)。例如,如果在每 x 秒加载一次的文本中出现一个 youtube 链接,而不是显示链接,插件可以用嵌入的视频替换它。另一个例子是笑脸:例如用图像替换 :)。这个列表可以继续下去,但我想你已经明白了。

问题是当 2 个或更多附加组件试图替换相同的内容时。

例如,假设小部件加载以下文本:http://www.youtube.com/watch?v=video_id一个附加组件尝试用视频替换文本,另一个附加组件尝试用相关的图像缩略图替换它。

如何解决两个附加组件之间的干扰。我也很感兴趣 firefox 如何在他们的附加系统上处理这种情况。我已经阅读了他们的一些关于 XUL 覆盖的文档,但我没有找到任何关于这种情况的信息。在他们的文档页面上:https://developer.mozilla.org/en/XUL_Overlays他们说 XUL 覆盖层可用于:

  • 为其他组件添加 UI,如示例中所述
  • 无需重写 XUL 文件的小片段
  • 重新提供整个 UI,重复使用 UI 的特定部分

在上面解释的情况下,我对最后 2 个更感兴趣,但没有任何运气。我也在谷歌上搜索过,但没有找到任何东西。

到目前为止,我能想到的唯一解决方案是建立一种机制,可以发现是否有 2 个或更多附加组件覆盖了相同的 UI,并通知用户(想要在他的站点上安装小部件的用户)禁用附加组件之一。如果这是唯一的解决方案,我也对您关于如何实现这一目标的想法很感兴趣。

注意:将小部件放在他的站点上的人不必安装附加组件。它将是一个类似于 firefox 插件的系统,用户可以在其中选择要安装的插件,然后只需将代码复制粘贴到他的站点即可。

最佳答案

我不确定这是否是您要找的,但我可以想到这样的解决方案:

1) 为每一种被替换的内容创建某种标识符。例如

  • YOUTUBE_LINK
  • 有点笑脸
  • 有点_OTHER_SMILEY

2) 当应用程序启动时,加载项注册到每种类型的替换。因此,有全局可用的集合/数组/任何集合类型,已注册附加组件来处理不同类型的文本。 更具体地说,有一个映射(关联数组),用 Java 表示法映射:

InputText => Set<AddOn>

例如,基于字符串和数组(这是在每个插件动态添加之后;顺序无关紧要)

listeners["YOUTUBE_LINK"] = ["addon1", "addon7"];
listeners["SOME_SMILEY"] = ["addon2", "addon7", "addon9"]

3) 插件要么具有表示它们处理输入的“优先级”的 ID,要么以某种方式可配置(全局每个应用程序或每个插件,它们应该运行不同类型内容的顺序).

例如 应用程序配置中的一些内容:

order["YOUTUBE_LINK"] = ["addon7", "addon3", "addon5", "addon1"]

这意味着,如果安装了 addon7,则使用它来处理 youtube 链接;如果不是,使用 addon3;如果没有 addon3,使用 addon5 等等......

问题是,如果您不知道正在开发的所有可能的插件,您就不能那样使用它。 你可以做的是,等待所有插件加载,然后向用户显示信息: “addon1”和“addon7”要处理 Youtube 链接,您要处理哪一个? (点击一些东西,然后存储设置,或者让用户在脚本中写下来)。

愚蠢的方式(但也许不是那么多,如果插件的行为完全相同),每个插件都可以在其中包含一些 ID,并根据哪个具有最高 ID 来执行操作。

关于 Firefox,如果有两个相互竞争的插件试图做类似的工作,它通常会以不兼容告终……当然取决于插件的努力是否可以结合。但基本上,你必须以某种方式确保事物的顺序,否则它可能会随机结束,这绝对不是好方法。

关于javascript - 避免覆盖UI的一些方法(可能类似于firefox中的附加组件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797246/

相关文章:

javascript - 导航栏中的动画标题

jquery - SlideToggle div 覆盖内容

javascript - jQuery Accordion 中的谷歌地图在 jsFiddle 中工作,但在手动调整窗口大小之前 map 不会加载到我的服务器上

javascript - 使用 HTML、CSS、Jquery 的滑动登录面板

php - 用 php、html 制作 Facebook 相册幻灯片? jquery?

javascript - 错误 : Actions must be plain objects. 使用自定义中间件进行异步操作。 React-redux 错误

javascript - 创建可在制表符中直接单击的复选框

html - 仅限 CSS Downscale IMG,在 firefox 上

jquery - 引导列未对齐

JavaScript jQuery animate 不起作用,其他效果都很好