来自 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();
}
在清单 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();
}