仅限于单个网址时,Chrome扩展程序无法在不刷新的情况下加载

时间:2017-02-07 08:51:15

标签: javascript google-chrome-extension manifest

我的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');
};

解决方法#1

的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,这会产生大量的事件。没有必要在其他子页面上收听它们。

解决方法#2

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将有一个函数可以调用。我不得不“删除”这个...我必须卸载内容脚本。

0 个答案:

没有答案