【问题标题】:Can you only use either a background page or a background script in a chrome extension?您只能在 chrome 扩展中使用背景页面或背景脚本吗?
【发布时间】:2020-10-25 01:35:06
【问题描述】:

在我的 chrome 扩展中,出于显而易见的原因,我想要一个后台脚本。但是,我现在还想要一个我喜欢的背景页面,这里描述了使用 iFrame 加载一些 html (Chrome extension: loading a hidden page (without iframe)),我可以使用内容脚本与之交互。但是当我尝试像这样加载后台脚本和后台页面时:

...
"background":{
    "scripts": ["background_script.js"]
},
"background": {
    "page": "iFrameBackground.html",
    "persistent": true
},
...

然后尝试从我的内容脚本向后台脚本发送消息,我收到此错误:

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

所以要么我在这里完全遗漏了一些东西,要么你真的只能使用两者之一?

谢谢你:)

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

    问题

    1. 只能使用一种声明方法。
    2. 您的 json 无效,因为它有两个相同的密钥,因此 Chrome 甚至不会安装它。

    解决方案

    只选择一种方法。任何方法。

    无论声明方式如何,您都可以在后台脚本/页面中访问 DOM。

    每种方法的结果都是相同的:它们都创建了一个背景页面。一个扩展可以只有一个背景页面,其中加载了任意数量的背景脚本——就像在任何其他网页中一样。 scripts 方法的存在只是为了方便:它只是生成一个虚拟 HTML 页面,正如您在 devtools inspector for the background page 中看到的那样。

    【讨论】:

    • 感谢您的回答 :) 那么您所说的只是一个持久的后台脚本?我将如何将 iFrame 放入其中?把它写成一个带有脚本标签的html页面?
    • 你似乎想多了。可以有任意数量的脚本,但它们将在一页中运行。您可以像在任何其他页面中一样在该页面中创建和添加 iframe 元素。
    • :) 是的可能。但是我现在仍然不知道如何在实践中做到这一点。所以你说的是两个背景脚本,其中一个是 html 页面?我什至需要一个内容脚本来获取 iFrame 内容吗?
    • like: "background":{ "scripts": ["background_script.js", "iFrameBackground.html"] },
    • scripts 你只能列出...脚本!那是js文件。您不需要 iFrameBackground.html。你可以在你的 js 文件中使用 DOM,查看 document.createElement 的任何教程等等。这确实是基本的 Web 开发内容。
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多