【问题标题】:How to run background script of chrome extension on every web page page load?如何在每个网页加载时运行 chrome 扩展的后台脚本?
【发布时间】:2019-09-26 18:44:14
【问题描述】:

我创建了一个后台脚本,它在快捷键上运行并单击扩展图标,但现在我想在每次网页加载时运行它。

【问题讨论】:

  • 这取决于您希望它在每个页面加载时执行的操作。根据具体情况,您可能需要像 chrome.tabs.onUpdated (example) 或完全独立的 content script 这样的侦听器。
  • 我需要截图。现在我使用这个 API “chrome.browserAction.onClicked.addListener”
  • 这里我想截取每个网页的截图,刷新扩展后它会自动运行并截取屏幕截图,而无需点击扩展图标。希望你现在明白了!
  • 我明白了,但 Chrome 不允许扩展程序在未经用户确认的情况下静默截屏,以防止恶意软件监视用户。 AFAIK 唯一的解决方案是使用chrome.debugger API 发送Page.captureScreenshot 命令,但这会在每个选项卡上方显示一个关于扩展调试的警告面板。
  • 啊,你可以通过--silent-debugger-extension-api命令行运行chrome来隐藏警告。

标签: google-chrome google-chrome-extension


【解决方案1】:

后台脚本已经在每个页面请求上加载。如果您希望在后台进程中更新后台脚本和内容脚本之间的数据,则需要创建两个侦听器,第二个侦听器在打开多个选项卡时很有用。请记住,只需调用chrome.extension.getBackgroundPage() 即可检索弹出窗口中的数据

background.js

chrome.tabs.onUpdated.addListener(() => {
  chrome.tabs.sendMessage(info.tabId, {
    message: 'DO_SOMETHING_MESSAGE'
  });
})

chrome.tabs.onActivated.addListener(() => {
  chrome.tabs.sendMessage(info.tabId, {
    message: 'DO_SOMETHING_MESSAGE'
  });
})

content.js 的功能应该与此类似。

const processContent = () => {
  // do whatever here.
  let data = {message: UPDATE_BACKGROUND_DATA}
  chrome.runtime.sendMessage(data);
}

// run when messages sent from background.js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.message === 'DO_SOMETHING_MESSAGE') {
    processContent();
  }
});

// run onload
processContent();

最后,在后台脚本中创建一个侦听器来侦听任何更新的数据。

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg.message === UPDATE_BACKGROUND_DATA) {
    // update background vars
  }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-07-25
    相关资源
    最近更新 更多