"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > कंटेंट स्क्रिप्ट के माध्यम से बैकग्राउंड स्क्रिप्ट से इंजेक्टेड स्क्रिप्ट तक संचार कैसे स्थापित करें?

कंटेंट स्क्रिप्ट के माध्यम से बैकग्राउंड स्क्रिप्ट से इंजेक्टेड स्क्रिप्ट तक संचार कैसे स्थापित करें?

2024-11-09 को प्रकाशित
ब्राउज़ करें:388

How to Establish Communication from Background Script to Injected Script through Content Script?

बैकग्राउंड स्क्रिप्ट से कंटेंट स्क्रिप्ट में और फिर इंजेक्टेड स्क्रिप्ट में संदेश भेजना

समस्या:
पृष्ठभूमि पृष्ठ से सामग्री स्क्रिप्ट और फिर इंजेक्टेड स्क्रिप्ट पर संदेश भेजने का प्रयास करने के बावजूद, प्रक्रिया अपेक्षा के अनुरूप काम करने में विफल रही है। सामग्री स्क्रिप्ट पृष्ठभूमि स्क्रिप्ट से संदेश प्राप्त करने में असमर्थ है।

समाधान:
समस्या सामग्री स्क्रिप्ट को इंजेक्ट करने के तरीके से उत्पन्न होती है। जब कोई एक्सटेंशन लोड किया जाता है, तो यह स्वचालित रूप से सामग्री स्क्रिप्ट को मौजूदा टैब में इंजेक्ट नहीं करता है। इंजेक्शन केवल तब होता है जब एक नया टैब बनाया जाता है या एक्सटेंशन लोड होने के बाद मौजूदा टैब को नेविगेट किया जाता है।

समाधान 1: सशर्त स्क्रिप्ट इंजेक्शन
पृष्ठभूमि और सामग्री के बीच संचार सुनिश्चित करने के लिए स्क्रिप्ट, एक सशर्त स्क्रिप्ट इंजेक्शन को नियोजित किया जा सकता है। पृष्ठभूमि स्क्रिप्ट जाँच सकती है कि टैब संदेश प्राप्त करने के लिए तैयार है या नहीं और सामग्री स्क्रिप्ट को केवल तभी इंजेक्ट कर सकता है जब यह पहले से ही इंजेक्ट नहीं किया गया हो।

कोड:

// Background script
function ensureSendMessage(tabId, message, callback) {
  chrome.tabs.sendMessage(tabId, { ping: true }, function (response) {
    if (response && 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);
          throw Error("Unable to inject script into tab "   tabId);
        }
        // OK, now it's injected and ready
        chrome.tabs.sendMessage(tabId, message, callback);
      });
    }
  });
}

सामग्री स्क्रिप्ट:

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  if (request.ping) {
    sendResponse({ pong: true });
    return;
  }
  // Content script action
});

समाधान 2: दोहरा निष्पादन रोकथाम
एक अन्य समाधान में सामग्री स्क्रिप्ट को टैब में इंजेक्ट करना लेकिन इसके निष्पादन को एक से अधिक बार रोकने के उपायों को लागू करना शामिल है।

कोड:

// Background script
function ensureSendMessage(tabId, message, callback) {
  chrome.tabs.executeScript(tabId, { file: "content_script.js" }, function () {
    if (chrome.runtime.lastError) {
      console.error(chrome.runtime.lastError);
      throw Error("Unable to inject script into tab "   tabId);
    }
    // OK, now it's injected and ready
    chrome.tabs.sendMessage(tabId, message, callback);
  });
}

सामग्री स्क्रिप्ट:

var injected;

if (!injected) {
  injected = true;
  // Your toplevel code
}

समाधान 3: अंधाधुंध स्क्रिप्ट इंजेक्शन
अंत में, आप एक्सटेंशन आरंभीकरण पर सभी टैब में सामग्री स्क्रिप्ट को इंजेक्ट करना चुन सकते हैं। यह केवल तभी उचित है जब आपकी स्क्रिप्ट कई बार निष्पादित होने पर या पृष्ठ लोड होने के बाद स्वयं में हस्तक्षेप नहीं करती है।

कोड:

chrome.tabs.query({}, function (tabs) {
  for (var i in tabs) {
    // Filter by URL if needed
    chrome.tabs.executeScript(tabs[i].id, { file: "content_script.js" }, function () {
      // Now you can use normal messaging
    });
  }
});

एक बार इनमें से कोई भी समाधान लागू हो जाने पर, संदेशों को पृष्ठभूमि स्क्रिप्ट से सामग्री स्क्रिप्ट और अंततः इंजेक्टेड स्क्रिप्ट तक सफलतापूर्वक रिले किया जा सकता है।

विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: 1729218083 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] पर संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3