【问题标题】:Remove injected script in chrome extension删除 chrome 扩展中的注入脚本
【发布时间】:2021-06-19 21:58:30
【问题描述】:
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(
      null, {file : "app.js"});                                                                                                                                                                         
});

我在点击时将这样的代码注入到扩展程序中。但是当用户第二次单击扩展图标时,我想删除这个注入的代码。这怎么可能。代码注入一个 id 为“pluginHolder”的 html div。我可以使用基本的 js 代码 document.getElementById('pluginHolder').remove(); 手动删除它。

如何动态地执行这个过程?

提前致谢

【问题讨论】:

  • “删除脚本”根本没有任何意义。到第二次单击该图标时,您的脚本已经执行完毕。
  • 脚本将一个 div 注入到页面中。我只想动态删除那个 div
  • 所以你想要的是注入另一个脚本来删除div
  • 如前所述,没有办法“撤消”内容脚本所做的事情,也没有一种方法可以“卸载”它。您需要自己进行清理。

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

我认为最简单的解决方案类似于

if(document.getElementById('pluginHolder')) {
    document.getElementById('pluginHolder').remove()
} else {
   var pluginHolder = document.createElement('div');
   document.body.appendChild(pluginHolder);
}

如果你想影响 js 代码而不是 DOM。 你可以和eventListener一起玩,

 function logMouse() {
      console.log(e.x+':'+e.y);
}
// Initialize on first run to true else use old value NOT(!) ( last time injected script)

isEnable = isEnable ? !isEnable : !!isEnable;
if(isEnable) {
    window.addEventListener('mousemove', logMouse);
} else {
    window.removeEventListener('mousemove', logMouse);
} 

【讨论】:

  • NO,第一次点击它会注入 app.js(这个 js 注入一个 html 文件)。
  • 你真的可以注入html文件。您只能注入 js,所以这就是为什么我为您提供注入相同和平代码的解决方案。每次注入时启用\禁用其行为。没有 html 注入之类的东西。只有js注入。如果你愿意,我可以进一步解释
  • 我的 app.js 页面向页面注入了一个 DOM 元素。但是在后台页面中也有一个ajax调用。
  • 还有另一种方式我可以更好地使用带有 chrome.storage API 的弹出窗口
猜你喜欢
  • 2016-06-16
  • 1970-01-01
  • 2017-04-07
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
相关资源
最近更新 更多