![](/img/trans.png)
[英]Chrome Extension trouble with getting a ContextMenu to only load for a specific page
[英]Chrome Extension tab and contextmenu trouble
每當用戶右鍵單擊 chrome 上的任何網站時,我都試圖將消息從我的 contextmenu.js 文件發送到我的 content.js 文件。
這將包括網站
- 在當前選項卡上並且處於活動狀態
- 這是彈出窗口並且處於非活動狀態
- 這是彈出窗口並且處於活動狀態
- 在另一個窗口上並且處於非活動狀態
- 在另一個窗口上並且處於活動狀態
我的代碼如下所示:
//contextmenu.js
chrome.contextMenus.onClicked.addListener((clickData, tab) => {
chrome.tabs.sendMessage(tab.id, {text: 'rightClicked'}, (response) => {
console.log(response)
})
})
//content.js
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.text === 'rightClicked') {
sendResponse('performing operation')
}
})
我收到錯誤消息:
“未檢查的 runtime.lastError:無法建立連接。接收端不存在。”
假設contextmenu.js
在 manifest.json 的"background"
部分和content.js
的"content_scripts"
部分中聲明,發布的代碼很好,但擴展有很多活動部分,所以問題出在別處。 錯誤消息意味着在發送消息時沒有運行內容腳本,這可能在以下情況下發生:
content_scripts
部分中添加"run_at": "document_start"
, 更多信息。content_scripts
部分, 更多信息。 您在 iframe 內單擊,但不允許內容腳本在 iframe 內運行 - 在 manifest.json 的content_scripts
部分中添加"all_frames": true
, 更多信息並在 sendMessage 中指定 frameId,如下所示:
chrome.contextMenus.onClicked.addListener((clickData, tab) => { const {frameId} = clickData; chrome.tabs.sendMessage(tab.id, {text: 'rightClicked'}, {frameId}, response => { console.log(response) }); });
該頁面根本無法運行內容腳本(例如 chrome:// 頁面或其他擴展程序)- 一般無法修復,但對於個人使用,您可以使用--extensions-on-chrome-urls
命令啟動 Chrome行切換並將chrome://*/*
模式添加到content_scripts
部分的matches
列表中。
chrome://policy
是否存在runtime_blocked_hosts
並聯系您的管理員我想到了。
我的代碼沒有任何問題。 我只是沒有匹配正確的 URL,因為我正在一個沒有 URL 或 chrome://extension 本身的空白頁面上測試 onClick。 該代碼適用於任何網站。
//manifest.json
"content_scripts": [
{
"matches": ["<all_urls>"]
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.