我正在为特定网站(我不拥有)编写扩展程序,其网址仅在/#/之后变化。
示例:从网址
开始.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/summary
点击"时间线"链接指向下一个网址
.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/timeline/encounter
...但是当尝试匹配url来加载我的内容脚本时,来自#和beyond的所有内容都不包含在匹配中,因此它认为这些是同一页面。此外,查看控制台显示它甚至看不到任何新页面加载,尽管我点击链接,整个页面的内容更改,以及/#/之后的URL不同。
如果常用工具(设置" content_scripts"清单中的内容)无法正常工作,我怎么能让我的contentscript.js只在我需要它的地方运行?或者,我可以在/#/以某种方式显示之后创建网址吗?
任何节俭的解决方案都将不胜感激!
答案 0 :(得分:4)
我相信网址的锚位,也称为位置片段,在Chrome extension match pattern中始终被忽略。
但是,您可以执行的操作是匹配该特定域,并使用document.location.hash
标识位置锚点,并且仅在contentscript.js
中运行该函数(如果它是正确的页面)。例如:
if (("onhashchange" in window){
window.onhashchange = function () {
if(document.location.hash == '#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/summary'){
//do summary stuff
}
}
}
当然,您的contentscript.js
每页只会运行一次(因为它认为所有位置片段更改都在同一页面上)。因此,您必须使用onhashchange
事件注意哈希更改并相应地重新运行脚本。