首頁 > web前端 > js教程 > 如何將訊息從後台腳本傳送到內容腳本,然後傳送到注入腳本?

如何將訊息從後台腳本傳送到內容腳本,然後傳送到注入腳本?

Barbara Streisand
發布: 2024-10-18 12:04:26
原創
310 人瀏覽過

How to Send Messages from a Background Script to a Content Script and then to an Injected Script?

將訊息從後台腳本發送到內容腳本,然後發送到注入腳本

問題陳述

任務handhand的目的是在後台腳本和內容腳本之間建立通訊通道。內容腳本負責將另一個腳本注入到網頁中,注入的腳本是訊息的接收者。然而,這種通訊被證明是不成功的,特別是從後台腳本到內容腳本的初始訊息傳輸。

理解問題

問題的根源在於內容腳本注入的本質。載入或重新載入擴充功能時,Chrome 不會自動將內容腳本注入現有標籤。相反,注入僅在後續選項卡導航或開啟與指定 URL 模式相符的新分頁時發生。

解決方案

解決方案1:確保內容腳本準備好

<code class="js">// Background
function ensureSendMessage(tabId, message, callback){
  chrome.tabs.sendMessage(tabId, {ping: true}, function(response){
    if(response &amp;&amp; response.pong) { // Content script ready
      chrome.tabs.sendMessage(tabId, message, callback);
    } else { // No listener on the other end
      chrome.tabs.executeScript(tabId, {file: "content_script.js"}, function(){
        if(chrome.runtime.lastError) { console.error(chrome.runtime.lastError); }
        else { chrome.tabs.sendMessage(tabId, message, callback); }
      });
    }
  });
}

// Content script
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if(request.ping) { sendResponse({pong: true}); return; }
  /* Content script action */
});</code>
登入後複製

解決方案🎜>解決方案:總是透過執行時間檢查注入腳本

<code class="js">// Background
function ensureSendMessage(tabId, message, callback){
  chrome.tabs.executeScript(tabId, {file: "content_script.js"}, function(){
    if(chrome.runtime.lastError) { console.error(chrome.runtime.lastError); }
    else { chrome.tabs.sendMessage(tabId, message, callback); }
  });
}

// Content script
var injected;

if(!injected){
  injected = true;
  /* your toplevel code */
}</code>
登入後複製

解決方案3:初始化時不加區分地註入

<code class="js">chrome.tabs.query({}, function(tabs) {
  for(var i in tabs) { chrome.tabs.executeScript(tabs[i].id, {file: "content_script.js"}); }
}); </code>
登入後複製

以上是如何將訊息從後台腳本傳送到內容腳本,然後傳送到注入腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板