【问题标题】:Chrome Extension Development: Action on extension disableChrome 扩展开发:扩展禁用操作
【发布时间】:2017-06-02 12:33:02
【问题描述】:

我想知道当用户禁用/删除扩展程序时是否可以触发动作。

可能的行动: 显示 html 页面类型“我们不想看到你离开。请查看我们的网站”

这样的东西能用于这个目的吗?

 chrome.browserAction.onClicked.addListener(function(tab) {   
     chrome.tabs.executeScript(null, {file: "myScript.js"}); 
});

使用“myScript.js”保存点击时执行的逻辑。

取自this post

编辑:还发现“如果扩展程序被禁用或卸载,则不会触发任何事件”

onUninstalled 事件(来自 API 文档)可能对我没有帮助吗?

【问题讨论】:

  • onUninstalled 与禁用扩展无关。

标签: google-chrome google-chrome-extension


【解决方案1】:

正如您在documentation browserAction.onClicked 中看到的,不能用于此任务。

由于禁用/删除扩展后唯一保留的部分是内容脚本,因此您可以声明一个内容脚本,该脚本会定期尝试访问您的扩展,因此失败将表明该扩展已被禁用。

这是一个在所有打开的选项卡顶部显示 DOM 元素的示例:

manifest.json:

"content_scripts": [{
  "matches": ["<all_urls>"],
  "run_at": "document_start",
  "all_frames": true,
  "js": ["ping.js"]
}]

ping.js:

var pingTimer = setInterval(ping, 1000);

function ping() {
  var port = chrome.runtime.connect();
  if (port) {
    port.disconnect();
    return;
  }
  clearInterval(pingTimer);
  onDisabled();
}

function onDisabled() {
  document.body.insertAdjacentHTML('beforeend',
    '<div style="all:unset; position:fixed; left:0; top:0; right:0; height:2rem;' +
    ' background:blue; color:white; font: 1rem/2rem sans-serif; z-index:2147483647;">' +
    'We hate to see you go. Please check our website: ' +
    '<a style="all:inherit; color:cyan; display:inline; position:static;"' +
    ' href="http://example.com">http://example.com</a></div>');
}

注意事项:

  • 这仅适用于允许内容脚本注入的页面。换句话说,除了浏览器内置页面(如基于 chromium 的浏览器中的 chrome://settings 或基于 Firefox 的浏览器中的 about:addons、扩展程序/插件网站商店网站、其他扩展程序的页面)之外的所有页面。
  • 在您的网站上打开新标签页会出现问题,因为内容脚本无法访问 chrome.tabs API,并且所有其他打开新标签页的标准 JavaScript 方法都将被默认弹出窗口阻止策略阻止,该策略可以是但是,由用户手动更改。
  • 显然,在内容脚本中可用的几个 chrome API 中,只有 chrome.runtime 能够在禁用扩展程序时幸存下来。
  • 当您重新启用或重新加载您的扩展时,其内容脚本不会自动重新注入到打开的选项卡中!您需要使用 chrome.tabs.query 和 chrome.tabs.executeScript 在背景/事件页面脚本中手动执行此操作。在 StackOverflow 上搜索示例。

【讨论】:

  • 对菜鸟问题的详细(和快速)回答真是太棒了。 Tnx 非常重视这一点。为我自己解决这个问题:1)当用户删除扩展时,我唯一能做的就是将一个 html 块注入到已经打开的(所有)选项卡中。我无法触发打开标签(使用我的网站)。 2)如果用户关闭 Chrome 并再次启动,内容脚本是否仍然存在/它会继续存在吗?我猜不会。所以“访问我们的网站”消息只会在初始浏览器会话期间可见,对吗?下一个浏览器会话将没有我的扩展程序。
  • 如果你这个周末没有任何事情可做,请告诉我:) 我有一些工作可以委托。
  • Id 还添加到此答案中,您可以设置一个卸载 URL,以便在用户卸载扩展程序时打开。
  • 以上 1) 可能吗?实际上,当用户删除扩展程序时,我可以在我的网站上打开一个标签页吗?显然这是从 Chrome v41 开始支持的
【解决方案2】:

你好你也可以用这个

chrome.runtime.setUninstallURL('http://myurl', function callback(id) {
        console.log("successfully uninstall");
    });
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2018-06-13
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多