gpt4 book ai didi

javascript - 仅当标签具有权限时,才会扩展脚本才会

转载 作者:行者123 更新时间:2023-12-04 17:14:29 24 4
gpt4 key购买 nike

我正在尝试通过 chrome.tabs.executeScript 注入(inject)内容脚本命令,但它尝试注入(inject)浏览器上的每个打开的选项卡。
在尝试注入(inject)脚本之前,有一种方法可以确定扩展程序是否具有选项卡的正确权限(在 manifest.json 中,permissions 键)?
我的错误是:Unchecked runtime.lastError: Cannot access contents of url "https://exmaple.com/". Extension manifest must request permission to access this host.我的代码是:

 const chromeManifest = chrome.runtime.getManifest();
chrome.tabs.query({}, tabs => {
const [script] = chromeManifest?.content_scripts?.[0].js;

tabs.forEach(tab => {
/* HERE CHECK IF THERE IS PERMISSION FOR THE TAB */
chrome.tabs.executeScript(tab.id, {
file: script,
});
});
});

最佳答案

只需阅读 chrome.runtime.lastError在 executeScript 的回调中抑制错误。

chrome.tabs.executeScript(tab.id, { file }, () => chrome.runtime.lastError);
作为案例 manifest.json 的优化 content_scriptsmatches对于特定站点模式,仅查询与此模式匹配的选项卡。
请注意 <all_urls>模式也将匹配 chrome:// , file:// , chrome-extension://标签,而 *://*/*只会匹配 http://https:// .
chrome.runtime.getManifest().content_scripts.forEach(script => {
const params = {
runAt: script.run_at,
allFrames: script.all_frames,
matchAboutBlank: script.match_about_blank,
};
// <all_urls> is not supported here so we use an empty array
const urlQuery = script.matches.filter(m => m !== '<all_urls>');
chrome.tabs.query({ url: urlQuery }, tab => {
script.js.forEach(file => {
chrome.tabs.executeScript(tab.id, { ...params, file }, () => {
const err = chrome.runtime.lastError;
// if (err) console.warn(err.message);
});
});
});
});

关于javascript - 仅当标签具有权限时,才会扩展脚本才会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68930346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com