google-chrome - 如何在某些域上显示 Chrome 扩展程序?

标签 google-chrome google-chrome-extension

我正在编写我的第一个 Chrome 扩展程序。我已经使用了许可,但我到处都能看到我的按钮。

我怎样才能只在我正在为其编写扩展程序的地址上显示按钮?

最佳答案

虽然 answer from @Sorter有效,这不是解决问题的最佳方法。

首先,它并不总是有效。如果页面使用了history.pushState ,页面操作将消失,直到您触发 onUpdatedonHighlighted再次事件Chromium issue 231075 .

其次,该方法效率低下,因为每次更新所有页面上的选项卡状态都会触发该方法。

让页面操作出现在某些域上的最有效和最可靠的方法是使用 declarativeContent API。这仅在 Chrome 33 之后可用。在此之前, webNavigation API 是最合适的 API。这些 API 相对于使用 tabs 的方法的优势API是你可以放心使用event pages , 因为你可以声明 URL filters .使用这些 URL 过滤器,只有当您导航到与 URL 过滤器匹配的页面时才会触发事件。因此,在真正需要之前不会激活您的扩展/事件页面(= 不会浪费 RAM 或 CPU)。

这是一个使用 background.js 的最小示例( webNavigation )接口(interface):

function onWebNav(details) {
    if (details.frameId === 0) {
        // Top-level frame
        chrome.pageAction.show(details.tabId);
    }
}
var filter = {
    url: [{
        hostEquals: 'example.com'
    }]
};
chrome.webNavigation.onCommitted.addListener(onWebNav, filter);
chrome.webNavigation.onHistoryStateUpdated.addListener(onWebNav, filter);
manifest.json :

{
    "name": "Name ",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "page_action": {
        "default_title": "Only visible on stackoverflow.com"
    },
    "permissions": [
        "webNavigation"
    ]
}

如果您的目标是 Chrome 33 及更高版本,那么您也可以改用 declarativeContent API。只需将“webNavigation”权限替换为“declarativeContent”,并使用以下后台脚本(background.js):

chrome.runtime.onInstalled.addListener(function() {
    chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
        chrome.declarativeContent.onPageChanged.addRules([{
            conditions: [
                new chrome.declarativeContent.PageStateMatcher({
                    pageUrl: {
                        hostEquals: 'example.com'
                    }
                })
            ],
            actions: [new chrome.declarativeContent.ShowPageAction()]
        }]);
    });
});

在这两个示例中,我都使用了 UrlFilter匹配 example.com领域。

关于google-chrome - 如何在某些域上显示 Chrome 扩展程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855956/

相关文章:

image - 使用 img max-width : 100% works in Chrome but not IE when parent div has position: absolute 使用浏览器窗口自动调整图像大小

c++ - 将 IAccessible 与 Google Chrome 一起使用会返回不完整的树

javascript - 通过 Blob URI 在新窗口中从 PUT 获取 PDF

javascript - DOMContentLoaded 事件无法捕获 Chrome 内容脚本中子框架的加载

google-chrome-extension - 仅允许 Chrome 扩展程序的一个事件实例

jquery - Chrome 在使用 Flexie 时无法正确显示 div,(IE 工作正常)

html - 滚动捕捉 CSS 跳过元素

javascript - Chrome 扩展程序内容脚本 javascript - run_at document_end 无法正常工作

javascript - 如何从 Chrome 扩展程序启动 Chrome 应用程序?

javascript - 如何阻止内容脚本自行启动