javascript - Chrome 扩展无法识别 # 之后的 URL 部分(contentscript.js 匹配)
我正在为一个特定的网站(我不拥有)编写一个扩展,该网站的 URL 只有在 /#/ 之后才会有所不同。
示例:从网址开始
.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/summary
点击“时间线”链接会跳转到下一个网址
.../#/PF/charts/patients/419d3081-5e20-4347-a852-52b2c333ce85/timeline/encounter
...但是在尝试匹配 URL 来加载我的内容脚本时,从 # 开始及其之后的所有内容都不包括在匹配中,所以它认为这些是相同的页面。此外,查看控制台显示它甚至没有检测到任何新页面加载,尽管我正在点击链接,整个页面的内容都发生了变化,而且 /#/ 之后的 URL 不同。
如果常规工具(在清单中设置“content_scripts”)不起作用,我怎样才能让我的 contentscript.js 只在我需要的地方运行?或者,我能以某种方式让 /#/ 之后的 URL 可见吗?
任何节俭的解决方案都将受到赞赏!
答案#1
我相信 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
}
}
}
自然地,你的 contentscript.js 每个页面只会运行一次(因为它认为所有的定位片段更改都在同一个页面上)。因此,你必须使用 onhashchange 事件来监视哈希变化,并相应地重新运行脚本。
