簡體   English   中英

Chrome 擴展選項卡和上下文菜單問題

[英]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"部分中聲明,發布的代碼很好,但擴展有很多活動部分,所以問題出在別處。 錯誤消息意味着在發送消息時沒有運行內容腳本,這可能在以下情況下發生:

  1. 該頁面仍在加載 - 要解決此問題,請在 manifest.json 的content_scripts部分中添加"run_at": "document_start"更多信息
  2. 擴展最近安裝或更新或重新加載,但選項卡沒有重新加載,請參閱升級或安裝后重新注入內容腳本或切換到程序化注入,而不是在 manifest.json 中聲明content_scripts部分, 更多信息
  3. 您在 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) }); });
  4. 該頁面根本無法運行內容腳本(例如 chrome:// 頁面或其他擴展程序)- 一般無法修復,但對於個人使用,您可以使用--extensions-on-chrome-urls命令啟動 Chrome行切換並將chrome://*/*模式添加到content_scripts部分的matches列表中。

  5. 頁面 URL 被列入黑名單 - 檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM