我的Chrome扩展程序仅限于以下网址: https://*.example.com/fix-path ,但是,当我导航到网址时,它不会加载,除非我刷新页面。
我已经设法以两种方式克服了这个问题,但是没有一个是足够好的,我想理解为什么它不会像我最初写的那样起作用。
的manifest.json
{
"manifest_version": 2,
"name": "Example",
"version": "1",
"content_scripts": [
{
"matches": [
"https://*.example.com/fix-path"
],
"js": [
"main.js"
],
"run_at": "document_end"
}
]
}
main.js
document.onmousemove = event => {
console.log('hello world');
};
的manifest.json
{
"manifest_version": 2,
"name": "Example",
"version": "1",
"content_scripts": [
{
"matches": [
"https://*.example.com/*"
],
"js": [
"main.js"
],
"run_at": "document_end"
}
]
}
main.js
document.onmousemove = event => {
console.log('hello world');
};
请注意,几乎所有内容都是一样的。唯一的区别是我不会将我的脚本限制为特定的URL,而是限制整个域。
我唯一的问题是我真的需要document.onmousemove
,这会产生大量的事件。没有必要在其他子页面上收听它们。
从https://stackoverflow.com/a/21071357/1372608
借来的解决方案的manifest.json
{
"manifest_version": 2,
"name": "Example",
"version": "1",
"background": {
"scripts": [
"background.js"
]
},
"content_scripts": [
{
"matches": [
"https://*.example.com/fix-path"
],
"js": [
"main.js"
],
"run_at": "document_end"
}
],
"permissions": [
"https://*.example.com/fix-path",
"tabs",
"webNavigation"
]
}
background.js
chrome.webNavigation.onHistoryStateUpdated.addListener(details => {
chrome.tabs.executeScript(null, { file: 'main.js' });
});
main.js
document.onmousemove = event => {
console.log('hello world');
};
如果我导航到 https://example.com 然后我只是点击菜单项打开 / fix-path ,扩展程序将加载然而,在此之后需要刷新,如果我在其他任何地方导航,将加载扩展。一旦我导航回来,即使主页也会加载它。
对于我来说,使用这些变通办法中的任何一个都不是世界末日,因为这两个变量都不是那么糟糕。但是,我非常想知道为什么它不按照我认为应该的方式工作......
任何? :)
更新
经过一番摆弄,我发现第二种解决方法几乎是好的。
问题是加载 main.js 后,document.onmousemove
将有一个函数可以调用。我不得不“删除”这个...我必须卸载内容脚本。