【发布时间】:2016-03-28 17:39:39
【问题描述】:
我们希望使用来自合作伙伴网站的内联安装来分发我们的 Chrome 扩展程序。我们想从扩展内部知道它是从哪个网站安装的。 有没有办法我们可以在安装过程中插入一个参数并在扩展中接收它? 提前致谢。
【问题讨论】:
标签: google-chrome google-chrome-extension
我们希望使用来自合作伙伴网站的内联安装来分发我们的 Chrome 扩展程序。我们想从扩展内部知道它是从哪个网站安装的。 有没有办法我们可以在安装过程中插入一个参数并在扩展中接收它? 提前致谢。
【问题讨论】:
标签: google-chrome google-chrome-extension
在 chrome 内联安装 API 中没有直接的方法可以做到这一点,但是有一种方法可以将它连接起来,需要一些工作。
基本上你需要两件事:
第一个很简单,并且是 chrome 安装 API 的一部分,只需将 successCallback 函数用于安装 API,如 here 所列。
既然您有一个时间点知道安装已经发生,那么将 URL 传递到您的扩展程序有点令人费解。最简单的方法是将事件数据中带有 URL 的自定义 javascript 事件发送到节点(文档适用于此),然后在您的扩展程序中,您可以在文档上侦听此自定义事件类型。然后在事件处理程序中,您将获得 URL。
但这是最容易的部分。棘手的部分是您的内容脚本不会出现在您刚刚安装的选项卡上。如果您的扩展程序中有内容脚本会在每次页面加载时加载,那么它们只会在安装之后在每个页面加载时加载。所以你安装的那个页面?在刷新之前,您不会让扩展程序监听该页面。
我可以为此想出许多解决方案,但没有一个很好。 首先,如果在您的合作伙伴网站上他们不介意您使用 URL,您可以添加一个哈希(假设已经没有哈希),并带有一个标志,表示您的扩展刚刚安装。然后,您可以使用 chrome 扩展选项卡 API 在当前活动窗口中查找当前活动选项卡的 URL。在加载扩展程序时读取它,如果它有一个说“#extensionInstallId =”,那么您可以假设这个扩展程序刚刚从该 URL 安装并记录它。这不是万无一失的,因为如果该人将该选项卡保持打开状态,当他们重新打开浏览器时,您将得到误报并在只有一个时获得 2 个安装事件。我想你甚至可以在 localStorage 中为扩展存储一个标志并检查它是否真的是第一次安装。
其次是做类似this的事情。这很麻烦,因为它会创建一个新的弹出窗口(只是为了将此事件发送到您的扩展程序)。
【讨论】: