Javascript 一些避免覆盖UI的方法(可能类似于firefox中的插件)
我一直在开发一个嵌入式小部件(html、css、js),它每x秒接收一些文本,并根据安装的第三方插件来解释这些文本。它与firefox插件系统类似,只是简化了很多。 让我给你举一个我正在努力实现的例子。 我为一个小部件提供了一个嵌入式代码,这样人们就可以把它放在自己的网站上,就像推特更新小部件一样。我还提供了一个小api(javascript),以便人们可以创建一些扩展(附加组件)。例如,如果在每x秒加载的文本中出现youtube链接,而不是显示该链接,则插件可以用嵌入的视频替换该链接。另一个例子是smileys:replace:),例如使用图像。名单还可以继续,但我想你已经知道了 问题在于,当两个或多个加载项试图替换相同的内容时 例如,假设小部件加载以下文本:一个加载项尝试用视频替换文本,另一个加载项尝试用相关图像替换文本 如何解决两个附加组件之间的干扰问题。我还对firefox如何在其附加组件系统上处理这种情况感兴趣。我已经阅读了他们关于XUL覆盖的一些文档,但是我没有发现任何关于这种情况的信息。在他们的文档页面上:他们说XUL覆盖层可用于:Javascript 一些避免覆盖UI的方法(可能类似于firefox中的插件),javascript,html,css,firefox-addon,Javascript,Html,Css,Firefox Addon,我一直在开发一个嵌入式小部件(html、css、js),它每x秒接收一些文本,并根据安装的第三方插件来解释这些文本。它与firefox插件系统类似,只是简化了很多。 让我给你举一个我正在努力实现的例子。 我为一个小部件提供了一个嵌入式代码,这样人们就可以把它放在自己的网站上,就像推特更新小部件一样。我还提供了一个小api(javascript),以便人们可以创建一些扩展(附加组件)。例如,如果在每x秒加载的文本中出现youtube链接,而不是显示该链接,则插件可以用嵌入的视频替换该链接。另一个例
- 为其他组件添加UI,如示例中所述
- 上面介绍了重写XUL文件的小部分而不必
- 重新提供整个UI,重用UI的特定部分
注意:将小部件放在其站点上的人不需要执行附加组件。这将是一个类似于firefox插件的系统,用户可以选择要安装的插件,然后将代码复制粘贴到他的站点。我不确定这是否是您想要的,但我可以想到这样的解决方案: 1) 为要替换的每种类型的内容创建某种标识符。例如
- YOUTUBE_链接
- 笑脸
- 有些人微笑着
InputText=>Set
例如,基于字符串和数组(这是在每个插件动态添加它之后;顺序无关紧要)
3) 这些插件要么具有表示其处理输入的“优先级”的ID,要么以某种方式可配置(每个应用程序全局或每个插件,它们在不同类型内容上运行的顺序)
例如。
应用程序配置中的某些内容:
order["YOUTUBE_LINK"] = ["addon7", "addon3", "addon5", "addon1"]
也就是说,如果安装了addon7,那么就用它来处理youtube链接;如果没有,使用addon3;如果没有加载项3,请使用加载项5,依此类推
问题是,如果你不知道所有可能开发的插件,你就不能这样使用它。
您可以做的是,等待加载所有加载项,然后向用户显示信息:
“addon1”和“addon7”希望处理Youtube链接,您希望哪一个这样做?(单击某个内容,然后存储设置,或让用户将其写在脚本中)
愚蠢的做法是(但如果插件的行为完全相同,可能不会太多),每个插件内部都可以有一些ID,并且取决于哪个插件的ID最高,它执行操作
关于Firefox,如果有两个相互竞争的插件试图做相似的工作,它通常会以不兼容告终。。。当然,这取决于插件的努力能否结合起来。但基本上,你必须确保事情的顺序,否则它可能会以随机方式结束,这绝对不是一个好办法。我不确定这是否是你想要的,但我可以这样想: 1) 为要替换的每种类型的内容创建某种标识符。例如
- YOUTUBE_链接
- 笑脸
- 有些人微笑着
InputText=>Set
例如,基于字符串和数组(这是在每个插件动态添加它之后;顺序无关紧要)
3) 这些插件要么具有表示其处理输入的“优先级”的ID,要么以某种方式可配置(每个应用程序全局或每个插件,它们在不同类型内容上运行的顺序)
例如。
应用程序配置中的某些内容:
order["YOUTUBE_LINK"] = ["addon7", "addon3", "addon5", "addon1"]
也就是说,如果安装了addon7,那么就用它来处理youtube链接;如果没有,使用addon3;如果没有加载项3,请使用加载项5,依此类推
问题是,如果你不知道所有可能开发的插件,你就不能这样使用它。
您可以做的是,等待加载所有加载项,然后向用户显示信息:
“addon1”和“addon7”想要处理Youtube链接,您想做哪一个