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

dou*_*lix 4 javascript url google-chrome google-chrome-extension

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

示例:从URL开始

.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/summary
Run Code Online (Sandbox Code Playgroud)

点击“时间轴”链接会转到下一个网址

.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/timeline/encounter
Run Code Online (Sandbox Code Playgroud)

...但是当尝试匹配url以加载我的内容脚本时,匹配中不包括#和之后的所有内容,因此它认为这些页面是同一页面。另外,查看控制台会发现,即使我单击链接,整个页面的内容更改以及/#/之后的网址不同,它甚至都看不到任何新页面加载。

如果常规工具(在清单中设置“ content_scripts”)不起作用,如何使我的contentscript.js仅在需要的地方运行?或者,我可以以某种方式使/#/之后的url可见吗?

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

Hue*_*uey 5

我相信url的锚位(也称为位置片段)在Chrome扩展匹配模式中始终会被忽略。

但是,您可以做的是匹配该特定域,并用于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
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

自然,您contentscript.js每页只会运行一次(因为它认为所有位置片段更改都在同一页上)。因此,您将必须使用onhashchange事件来注意哈希的变化,并相应地重新运行脚本。