我正在開發一個包含后臺腳本和內容腳本的擴展。當用戶單擊擴展程式的相關選單條目時,內容腳本從網頁中獲取選定的文本,然后將其發送到后臺腳本進行進一步處理。
這是manifest.json的相關部分:
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
我在about:debugging > This Firefox > Load Temporary Add-on...加載擴展以測驗它。
在代碼中,我從后臺腳本向內容腳本發送了一條訊息,但這會引發錯誤:
未捕獲(承諾)錯誤:無法建立連接。接收端不存在
我在about:devtools-toolbox 中使用除錯器進行了檢查,發現只有后臺腳本加載。
有沒有人知道是什么導致內容腳本無法加載以及解決方案是什么?
uj5u.com熱心網友回復:
后臺腳本應該向內容腳本發送一條訊息,詢問選定的文本,然后收聽它收到的訊息。然后它可以呼叫進行谷歌搜索的函式:
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 });
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346991.html
標籤:javascript 火狐 火狐插件 firefox-developer-tools
