【问题标题】:Can the manifest file be dynamic in Chrome Apps?清单文件可以在 Chrome 应用程序中是动态的吗?
【发布时间】:2019-06-13 13:19:43
【问题描述】:

我正在编写一个与网页通信的 Chrome 应用程序。为此,我在清单文件中添加了类似的内容。

"externally_connectable": {
  "matches": ["*://*.example.com/*"]
}

但“example.com”必须是动态的,因为个别客户只有一台网络服务器。

有没有可能,用户(安装应用程序)可以更改 externally_connectable 站点。

【问题讨论】:

  • 没有。一旦扩展被打包/安装,它就不能被编辑。而且也没有 API 可以在脚本中设置域。
  • 我猜你将不得不改变通信架构并使用动态注入的内容脚本,当 URL 匹配保存在扩展本地存储中的配置值时。
  • Moni 你有任何替代建议来解决我的问题
  • 您找到了可行的解决方案吗?
  • @Mouneer 不,我没有,看来你不能。

标签: google-chrome google-chrome-app


【解决方案1】:

还有另一种方式,网页可以通过内容脚本与扩展程序进行通信。如果网页和扩展都由您完成,则可以使用此方法。

例如

网页 扩展内容脚本 后台脚本 扩展 原生应用程序

对于扩展通信的网页到内容脚本,请使用window.postMessagewindow.addEventListener

对于谷歌 Chrome 浏览器,

对于扩展通信的后台脚本的扩展内容脚本使用chrome.runtime.sendMessagechrome.runtime.onMessage.addListener

对于原生应用程序通信扩展的后台脚本使用chrome.runtime.sendNativeMessage

请确保您的代码具备必要的安全性。

【讨论】:

    【解决方案2】:

    据我所知,"externally_connectable" 是从here 提到的网页发送消息(带数据)的唯一官方方式

    这需要为每个单独的域预定义值。但是,如果您只想制作一个扩展程序来接受来自任何网页的消息呢?

    如果你只是想通知对方一些事情,你可以使用原生JS Event从一侧在document上调度它,并在document上收听它也从另一侧作为@ 987654326@在扩展content script页面和网页之间共享。

    您不能使用JS CustomEvent 发送数据,因为每次发送数据时,由于sandbox 任何扩展的影响,您都会收到空的数据。

    如果您想共享数据,那么到目前为止我所知道的唯一解决方法(在花了大约一个月开发扩展程序之后)是在某种存储和 JS 原生事件机制之间进行组合。

    分步解决方案(假设你需要网页向扩展发送一些数据):

    1. 通过网页在document 上进行活动。
    2. 将数据临时保存在您喜欢的任何存储技术中 (localStorage、DOM 本身或其他任何东西......)
    3. 通过侦听在另一端(扩展)接收事件 document
    4. 读取数据并将其删除。

    希望这可以帮助某人或为讨论更好的方法打开大门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多