Firefox 扩展内容脚本在临时加载项加载期间不加载
Firefox extension content script does not load during temporary add-on load
我正在开发一个涉及后台脚本和内容脚本的扩展。当用户点击扩展的相关菜单项时,内容脚本从网页中获取选定的文本,然后将其发送到后台脚本进行进一步处理。
这里是manifest.json的相关部分:
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
我在 about:debugging > This Firefox > Load Temporary Add-on... 中加载扩展以测试它。
在代码中,我从后台脚本向内容脚本发送了一条消息,但会引发错误:
Uncaught (in promise) Error: Could not establish connection. Receiving
end does not exist
我使用调试器在 about:devtools-toolbox 中进行了检查,发现只有后台脚本加载。
有没有人知道是什么导致内容脚本加载失败,解决方案是什么?
后台脚本应向内容脚本发送一条消息,询问所选文本,然后收听它收到的消息。然后它可以调用执行 Google 搜索的函数:
function onCreated() {
if (browser.runtime.lastError) {
console.log(`Error: ${browser.runtime.lastError}`);
} else {
console.log("Item created successfully");
}
}
browser.menus.create({
id: "context-entry",
title: 'search',
contexts: ['all'],
onclick: getText
}, onCreated);
async function getText() {
const tabInfo = await getCurrentTab();
const [{ id: tabId }] = tabInfo;
browser.tabs.sendMessage(tabId, { trigger: 'getText' });
}
browser.runtime.onMessage.addListener(function ({ txt }) {
doSearch(txt);
});
function doSearch(txt) {
var searchURL = `https://www.google.com/search?q=${txt}`;
browser.tabs.create({url: searchURL});
}
并且内容脚本应该监听来自后台脚本的消息,并将选定的文本发回。
browser.runtime.onMessage.addListener(({ trigger }) => {
if (trigger === 'getText') {
const selection = window.getSelection();
const txt = selection.toString();
browser.runtime.sendMessage({ trigger: 'foundText', txt });
}
});
我正在开发一个涉及后台脚本和内容脚本的扩展。当用户点击扩展的相关菜单项时,内容脚本从网页中获取选定的文本,然后将其发送到后台脚本进行进一步处理。
这里是manifest.json的相关部分:
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
我在 about:debugging > This Firefox > Load Temporary Add-on... 中加载扩展以测试它。
在代码中,我从后台脚本向内容脚本发送了一条消息,但会引发错误:
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist
我使用调试器在 about:devtools-toolbox 中进行了检查,发现只有后台脚本加载。
有没有人知道是什么导致内容脚本加载失败,解决方案是什么?
后台脚本应向内容脚本发送一条消息,询问所选文本,然后收听它收到的消息。然后它可以调用执行 Google 搜索的函数:
function onCreated() {
if (browser.runtime.lastError) {
console.log(`Error: ${browser.runtime.lastError}`);
} else {
console.log("Item created successfully");
}
}
browser.menus.create({
id: "context-entry",
title: 'search',
contexts: ['all'],
onclick: getText
}, onCreated);
async function getText() {
const tabInfo = await getCurrentTab();
const [{ id: tabId }] = tabInfo;
browser.tabs.sendMessage(tabId, { trigger: 'getText' });
}
browser.runtime.onMessage.addListener(function ({ txt }) {
doSearch(txt);
});
function doSearch(txt) {
var searchURL = `https://www.google.com/search?q=${txt}`;
browser.tabs.create({url: searchURL});
}
并且内容脚本应该监听来自后台脚本的消息,并将选定的文本发回。
browser.runtime.onMessage.addListener(({ trigger }) => {
if (trigger === 'getText') {
const selection = window.getSelection();
const txt = selection.toString();
browser.runtime.sendMessage({ trigger: 'foundText', txt });
}
});