避免在使用 chrome.tabs.executeScript(...) 时多次动态注入相同的脚本

Pet*_*ete 5 javascript google-chrome-extension

我正在构建一个 Google Chrome 扩展程序。基本设置是我有一个浏览器操作按钮,当点击它来做它的事情时,它会注入 jQuery 和另一位 JavaScript 到活动选项卡中。

这是我的第一个 Chrome 扩展程序,但似乎如果用户第二次单击按钮采取行动,脚本将被重新注入。这是一个问题,因为它将使用的主要页面都是 AJAX,因此页面内容发生了显着变化,但实际页面 URL 永远不会改变。

这是一个合理的问题,还是我想多了,是否有一种简单的方法可以防止脚本多次注入同一页面?我应该将这些指定为内容脚本吗?

Xan*_*Xan 8

这绝对是一个合理的担忧。

简单的方法是使用类似于#ifndef在 C 中包含守卫的机制。

定义一个在内容脚本执行后设置的标志,并在执行任何操作之前检查它是否已定义。从同一个扩展注入的所有脚本共享 JS 执行上下文,因此是全局范围。

您的内容脚本可能如下所示:

if (window.contentScriptInjected !== true) {
    window.contentScriptInjected = true; // global scope

    /* Do your initialization and work */
}

/* global function definitions */
Run Code Online (Sandbox Code Playgroud)

检查应使用显式true值以避免在页面上出现误报,因为页面上的元素的id属性意外等于变量名称 - 浏览器创建一个隐式全局变量,指向该 DOM 元素,以便if检查它会是真的。