Javascript 一些避免覆盖UI的方法(可能类似于firefox中的插件)

Javascript 一些避免覆盖UI的方法(可能类似于firefox中的插件),javascript,html,css,firefox-addon,Javascript,Html,Css,Firefox Addon,我一直在开发一个嵌入式小部件(html、css、js),它每x秒接收一些文本,并根据安装的第三方插件来解释这些文本。它与firefox插件系统类似,只是简化了很多。 让我给你举一个我正在努力实现的例子。 我为一个小部件提供了一个嵌入式代码,这样人们就可以把它放在自己的网站上,就像推特更新小部件一样。我还提供了一个小api(javascript),以便人们可以创建一些扩展(附加组件)。例如,如果在每x秒加载的文本中出现youtube链接,而不是显示该链接,则插件可以用嵌入的视频替换该链接。另一个例

我一直在开发一个嵌入式小部件(html、css、js),它每x秒接收一些文本,并根据安装的第三方插件来解释这些文本。它与firefox插件系统类似,只是简化了很多。 让我给你举一个我正在努力实现的例子。 我为一个小部件提供了一个嵌入式代码,这样人们就可以把它放在自己的网站上,就像推特更新小部件一样。我还提供了一个小api(javascript),以便人们可以创建一些扩展(附加组件)。例如,如果在每x秒加载的文本中出现youtube链接,而不是显示该链接,则插件可以用嵌入的视频替换该链接。另一个例子是smileys:replace:),例如使用图像。名单还可以继续,但我想你已经知道了

问题在于,当两个或多个加载项试图替换相同的内容时

例如,假设小部件加载以下文本:一个加载项尝试用视频替换文本,另一个加载项尝试用相关图像替换文本

如何解决两个附加组件之间的干扰问题。我还对firefox如何在其附加组件系统上处理这种情况感兴趣。我已经阅读了他们关于XUL覆盖的一些文档,但是我没有发现任何关于这种情况的信息。在他们的文档页面上:他们说XUL覆盖层可用于:

  • 为其他组件添加UI,如示例中所述
  • 上面介绍了重写XUL文件的小部分而不必
  • 重新提供整个UI,重用UI的特定部分
我更感兴趣的是最后2个,在上面解释的情况下,但没有任何运气。我也在谷歌上搜索过,但什么也没找到

到目前为止,我能想到的唯一解决方案是建立一种机制,可以发现两个或多个加载项是否覆盖同一UI,并通知用户(希望在其站点上安装小部件的用户)禁用其中一个加载项。如果这是唯一的解决方案,我也对你关于如何实现这一点的想法感兴趣


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

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

1) 为要替换的每种类型的内容创建某种标识符。例如

  • YOUTUBE_链接
  • 笑脸
  • 有些人微笑着
2) 应用程序启动时,加载项将注册到每种类型的替换。因此,有一个全局可用的集合/数组/任何集合类型,注册了附加组件来处理不同类型的文本。 更具体地说,有一个映射(关联数组),它以Java表示法映射:

InputText=>Set

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

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

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

order["YOUTUBE_LINK"] = ["addon7", "addon3", "addon5", "addon1"]
也就是说,如果安装了addon7,那么就用它来处理youtube链接;如果没有,使用addon3;如果没有加载项3,请使用加载项5,依此类推

问题是,如果你不知道所有可能开发的插件,你就不能这样使用它。 您可以做的是,等待加载所有加载项,然后向用户显示信息: “addon1”和“addon7”希望处理Youtube链接,您希望哪一个这样做?(单击某个内容,然后存储设置,或让用户将其写在脚本中)

愚蠢的做法是(但如果插件的行为完全相同,可能不会太多),每个插件内部都可以有一些ID,并且取决于哪个插件的ID最高,它执行操作


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

我不确定这是否是你想要的,但我可以这样想:

1) 为要替换的每种类型的内容创建某种标识符。例如

  • YOUTUBE_链接
  • 笑脸
  • 有些人微笑着
2) 应用程序启动时,加载项将注册到每种类型的替换。因此,有一个全局可用的集合/数组/任何集合类型,注册了附加组件来处理不同类型的文本。 更具体地说,有一个映射(关联数组),它以Java表示法映射:

InputText=>Set

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

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

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

order["YOUTUBE_LINK"] = ["addon7", "addon3", "addon5", "addon1"]
也就是说,如果安装了addon7,那么就用它来处理youtube链接;如果没有,使用addon3;如果没有加载项3,请使用加载项5,依此类推

问题是,如果你不知道所有可能开发的插件,你就不能这样使用它。 您可以做的是,等待加载所有加载项,然后向用户显示信息: “addon1”和“addon7”想要处理Youtube链接,您想做哪一个