【问题标题】:Background scripts vs Content Scripts后台脚本与内容脚本
【发布时间】:2016-09-15 13:28:39
【问题描述】:

我正在尝试开发一个 chrome 扩展程序,它可以保存在所有选项卡中打开的网页的 url,然后在需要时加载它们。现在我知道内容脚本、后台脚本和 popup.js。内容脚本主要处理加载网页的内容,它们与chrome api交互较少,后台脚本在隔离环境中执行,我们可以使用所有chrome api方法,popup.js只是在popup.html上下文中运行的javascript .

现在这是我的问题,我在 popup.html 中有一个名为“保存”的按钮,单击该按钮时,我想保存在一个窗口下的多个选项卡中打开的所有网页 URL。我怎样才能做到这一点? 我应该写内容还是后台脚本?

抱歉,我提出了一个愚蠢的问题。我是 chrome api 的新手。有什么帮助/建议吗?

【问题讨论】:

  • @Ghostship 实际上没有。阅读完整的问题。我知道标题是一样的,我会改写它。
  • 首先,阅读有关消息传递以及如何在弹出窗口和后台之间进行通信的文档。其他问题已经回答了该通信部分。不要让朋友投票,这只会吸引像我这样的版主更多的关注。
  • @ZigMandel 感谢您的帮助。对不起,但我没有要求任何人支持我的帖子。即使你认为我做到了,我也很抱歉。
  • 好吧,您或多或少已经在问题中回答了您的问题。您是否需要访问网页内容才能执行您想要的操作(内容脚本)?您是否需要访问完整的 Chrome API 来执行您想要的操作(后台脚本)?你也需要吗?您的弹出窗口中的代码是否有足够的 API 和信息访问权限来做您想做的事情?

标签: google-chrome google-chrome-extension google-chrome-app


【解决方案1】:

不需要内容脚本或背景页面。您可以在 popup.js 中执行此操作,因为弹出页面实际上在与扩展名相同的上下文中运行。

在您的popup.js 中,只需调用chrome.tabs.query 即可获取标签信息,包括网址(您需要在manifest.json 中声明tabs 权限)。如果你想指定window id,要么使用WINDOW_ID_CURRENT,要么通过其他方式检索(取决于你的逻辑)

chrome.tabs.query({ windowId: YOUR_WINDOW_ID }, (tabs) => {
    tabs.forEach((tab) => console.log(tab.url));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2017-10-20
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多