来自 popup.js 的 Manifest v3 注入脚本

Manifest v3 inject script from popup.js

在清单 v2 中,此代码有效并在单击按钮时注入了脚本:

popup.js v2(有效)

document.addEventListener('DOMContentLoaded', function () {
// Get button by ID
var button = document.getElementById('btnScan');

// Define button on click action
button.onclick = function () {
    chrome.tabs.executeScript(null, {
        file: 'Scripts/script.js'
    });
    window.close();
    }
});

现在在清单 v3 中,chrome.tabs.executeScript 被替换为 chrome.scripting.executeScript

scripting权限添加到manifest.json.

popup.js v3(不工作)

document.addEventListener('DOMContentLoaded', function () {
// Get button by ID
var button = document.getElementById('btnScan');

// Define Scan button on click action
button.onclick = function () {
    chrome.scripting.executeScript
        (
        {
            target: { tabId: null}, // ???????
            files: ['Scripts/script.js']
        }
        );
    window.close();
    }
});

问题是 chrome.tabs.executeScript 需要 tabId 值作为参数之一。 如何在 popup.js 中获取 tabId 值或转换清单 v2 版本 javascript 以使其工作相同?

感谢@wOxxOm 发表了 link 作为评论。

解决方案是获取活动选项卡并使用其 tabId

document.addEventListener('DOMContentLoaded', function () {
    // Get button by ID
    var button = document.getElementById('btnScan');
    button.onclick = injectScript;
});

async function injectScript() {
    const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
    await chrome.scripting.executeScript({
    target: { tabId: tab.id },
    files: ['Scripts/script.js']
    });
    window.close();
}