我实际上正在为Chrome开发GMail扩展程序。除了我的插件注入,一切正常。 我正在触发hashchange事件并检查是否必须为此上下文注入我的插件。
示例:如果我得到的内容与" #inbox / xxxxxxx"我会注射我的插件,但如果我得到这样的东西:" #inmpbox / p2"我不会注入它,因为它是列表上下文。
当用户没有向下一个/上一个邮件按钮发送垃圾邮件或者发送垃圾邮件时,它正常工作(当您点击"撰写新邮件"哈希更改但我不想重新加载我的插件)
我正在使用正则表达式来捕捉注入的上下文:
if((/^#(inbox)\/(.*)\b/.test(location.hash)) || (/^#(drafts)\/(.*)\b/.test(location.hash)) || (/^#(search)((\/([^\/])+){2})/.test(location.hash)) || (/^#(imp)\/(.*)/.test(location.hash)) || (/^#(label)((\/([^\/])+){2})/.test(location.hash)) || (/^#(all)\/(.*)/.test(location.hash)) || (/^#(spam)\/(.*)/.test(location.hash)) || (/^#(category)\/(.*)/.test(location.hash)) || (/^#(trash)\/(.*)/.test(location.hash))){
if((/(compose=)(.*)$/.test(location.hash)) || (/(projector=1)$/.test(location.hash)) || (/^#(inbox)\/p(.*)\b/.test(location.hash)) || (/^#(drafts)\/p(.*)\b/.test(location.hash)) || (/^#(search)\/p(.*)\/(.*)/.test(location.hash)) || (/^#(imp)\/p(.*)/.test(location.hash)) || (/^#(label)\/p(.*)\/(.*)/.test(location.hash)) || (/^#(all)\/p(.*)/.test(location.hash)) || (/^#(spam)\/p(.*)\/(.*)/.test(location.hash)) || (/^#(category)\/p(.*)\/(.*)/.test(location.hash)) || (/^#(trash)\/p(.*)/.test(location.hash))) {
console.log("Stop the script");
return;
}
//the construction of my plugin
}
问题在于,当用户转到邮件概述并撰写新邮件时,哈希来自"#inbox / xxxxxxxxx" to" #inbox / xxxxxxxxx?compose = new"所以我设置了/(compose=)(.*)$/
,但是如果用户关闭了邮件窗口,则哈希再次出现:" #inmpbox / xxxxxxxxx"并且插件再次加载。
我不知道这个哈希解决方案是否是最好的,因为我遇到了这样的问题。我希望得到一些建议或解决方案,只有当我在一个邮件概述上时才注入我的插件。 (我的插件非常接近支持) 希望所有这些都足够清楚。 此致
答案 0 :(得分:0)
您可以切换插件的可见性,而不是在打开/关闭撰写痣时卸载/重新加载。