Chrome扩展程序在#(contentscript.js匹配)后无法识别网址的一部分

时间:2015-07-04 04:20:34

标签: javascript google-chrome url google-chrome-extension

我正在为特定网站(我不拥有)编写扩展程序,其网址仅在/#/之后变化。

示例:从网址

开始
.../#/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只在我需要它的地方运行?或者,我可以在/#/以某种方式显示之后创建网址吗?

任何节俭的解决方案都将不胜感激!

1 个答案:

答案 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事件注意哈希更改并相应地重新运行脚本。