Chrome एक्सटेंशन के मैसेज भेजने की सुविधा के लिए स्ट्रक्चर्ड क्लोन को अनलॉक करना

Justin Lulejian
Justin Lulejian

पब्लिश किया गया: 22 अप्रैल, 2026

आम तौर पर, अलग-अलग एक्सटेंशन कॉम्पोनेंट (बैकग्राउंड स्क्रिप्ट, कॉन्टेंट स्क्रिप्ट, पॉप-अप) के बीच कम्यूनिकेशन के लिए, JSON सीरियलाइज़ेशन का इस्तेमाल किया जाता है. JSON, भरोसेमंद है. हालांकि, इसकी कुछ सीमाएं हैं.

हमें यह बताते हुए खुशी हो रही है कि Chrome 148 से, एक्सटेंशन डेवलपर, मैसेज सीरियलाइज़ेशन के लिए JSON के बजाय, स्ट्रक्चर्ड क्लोन एल्गोरिदम का इस्तेमाल कर सकते हैं! इस नई सुविधा की मदद से, एक्सटेंशन के कॉन्टेक्स्ट के बीच ज़्यादा जटिल डेटा टाइप भेजे जा सकते हैं. इसके लिए, मैन्युअल तरीके से सीरियलाइज़ेशन करने की ज़रूरत नहीं होती.

स्ट्रक्चर्ड क्लोन का इस्तेमाल क्यों करें?

JSON सीरियलाइज़ेशन (JSON.stringify के ज़रिए) काम करता है. हालांकि, कभी-कभी डेवलपर को मॉडर्न JavaScript टाइप के साथ काम करते समय, कई मुश्किलों का सामना करना पड़ता है.

यहां एक खास उदाहरण दिया गया है, जो एक्सटेंशन डेवलप करते समय आपके सामने आ सकता है:

// Sending a Map with JSON serialization
const myMap = new Map([['id', 123]]);

// Arrives as {} on the other side!
chrome.runtime.sendMessage(myMap);

// Workaround: Convert Map to an Array of entries before sending
const message = Array.from(myMap.entries());
chrome.runtime.sendMessage(message);

// On the receiving side:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  const receivedMap = new Map(message);
});

कुछ अन्य स्थितियां जहां JSON काम नहीं करता. इन स्थितियों में, आपको Set, BigInt, NaN और Infinity, Date, और Error ऑब्जेक्ट के लिए कोई दूसरा तरीका अपनाना पड़ सकता है.

स्ट्रक्चर्ड क्लोन सीरियलाइज़ेशन का इस्तेमाल करने का मतलब है कि अब ऐसे कई ऑब्जेक्ट भेजे जा सकते हैं जिन्हें पहले एक्सटेंशन मैसेजिंग के ज़रिए भेजना मुश्किल था या भेजा ही नहीं जा सकता था. उदाहरण के लिए, अब Map ऑब्जेक्ट को सीधे भेजा जा सकता है:

// Sending a Map with Structured Clone
const myMap = new Map([['id', 123]]);

// Arrives as a Map on the other side!
chrome.runtime.sendMessage(myMap);

// On the receiving side:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  // message is already a Map instance!
  console.log(message.get('id')); // 123
});

ज़्यादा टाइप के लिए सहायता उपलब्ध है

स्ट्रक्चर्ड क्लोन, other types जैसे File और Blob के लिए सहायता उपलब्ध कराता है.

बीटा टेस्टिंग कार्यक्रम में शामिल होने का तरीका

पिछली सुविधाओं के साथ काम करने की सुविधा बनाए रखने और मौजूदा एक्सटेंशन को काम करने से रोकने के लिए, यह सुविधा ऑप्ट-इन है. इसे अपने एक्सटेंशन के लिए, दुनिया भर में उपलब्ध कराने के लिए, manifest.json में एक कुंजी जोड़ी जा सकती है:

{
  "name": "My Extension",
  "version": "1.0",
  "manifest_version": 3,
  "message_serialization": "structured_clone"
}

अगर इसे नहीं जोड़ा जाता है या Chrome का वर्शन 148 से कम है, तो ब्राउज़र, एक्सटेंशन के लिए JSON पर आधारित मौजूदा सुविधा का इस्तेमाल करता है.

स्ट्रक्चर्ड क्लोन एल्गोरिदम के लिए सहायता उपलब्ध कराकर, हम एक्सटेंशन मैसेजिंग एपीआई को वेब प्लैटफ़ॉर्म की स्टैंडर्ड सुविधाओं के साथ अलाइन कर रहे हैं. यह सुविधा, Web Workers और iframe कम्यूनिकेशन में इस्तेमाल किए जाने वाले postMessage की तरह है. इससे आपको ज़्यादा फ़्लेक्सिबिलिटी और कंट्रोल मिलता है.

इंटरऑपरेबिलिटी और समस्याएं

स्ट्रक्चर्ड क्लोन सीरियलाइज़ेशन की हमारी सुविधा, JSON की तुलना में कई ज़्यादा टाइप के लिए सहायता उपलब्ध कराती है. हालांकि, आपको कुछ आर्किटेक्चरल मान्यताओं और लागू करने से जुड़ी कुछ समस्याओं के बारे में पता होना चाहिए.

काम न करने वाले टाइप

हमारी सुविधा के साथ, शेयर किए गए ऑब्जेक्ट जैसे SharedArrayBuffer और ऑब्जेक्ट ट्रांसफ़र करने की सुविधा जैसे ArrayBuffer उपलब्ध नहीं है. SharedArrayBuffer को सीरियलाइज़ या डीसीरियलाइज़ नहीं किया जा सकेगा. यह स्थिति पर निर्भर करता है. साथ ही, Uint8Array जैसे ट्रांसफ़र किए जा सकने वाले ऑब्जेक्ट को भेजने की कोशिश करने पर, उसकी कॉपी भेजी जाएगी.

एक्सटेंशन से एक्सटेंशन के बीच कम्यूनिकेशन

डेटा की अखंडता बनाए रखने के लिए, हम सीरियलाइज़ेशन फ़ॉर्मैट को मैच करने के लिए ज़रूरी शर्तें लागू करते हैं. सीरियलाइज़ेशन फ़ॉर्मैट मैच न होने पर, एक्सटेंशन, runtime.sendMessage या runtime.connect के ज़रिए सीधे कम्यूनिकेट नहीं कर सकते. उदाहरण के लिए, अगर एक्सटेंशन A, JSON सीरियलाइज़ेशन का इस्तेमाल करता है और स्ट्रक्चर्ड क्लोन का इस्तेमाल करके, एक्सटेंशन B को मैसेज भेजने की कोशिश करता है, तो मैसेज नहीं भेजा जा सकेगा और पोर्ट बंद हो जाएगा. इसके उलट भी ऐसा ही होगा.

वेब पेज कम्यूनिकेशन

externally_connectable का इस्तेमाल करने वाले वेब पेज, टारगेट एक्सटेंशन के सीरियलाइज़ेशन फ़ॉर्मैट के हिसाब से अपने-आप अडजस्ट हो जाएंगे. अगर आपका एक्सटेंशन, स्ट्रक्चर्ड क्लोन का इस्तेमाल करता है, तो runtime एपीआई का इस्तेमाल करके मैसेज भेजने वाले वेब कॉन्टेक्स्ट, स्ट्रक्चर्ड क्लोन का इस्तेमाल अपने-आप करेंगे. इसके उलट भी ऐसा ही होगा. इसका मतलब है कि सीरियलाइज़ेशन से जुड़ी गड़बड़ियां रोकने के लिए, वेबसाइट और एक्सटेंशन को अपने सीरियलाइज़ेशन फ़ॉर्मैट के साथ सिंक करना होगा.

नेटिव मैसेज सेवा

नेटिव मैसेजिंग चैनल, हमेशा JSON सीरियलाइज़ेशन का इस्तेमाल करते हैं. नेटिव होस्ट को, सिर्फ़ स्ट्रक्चर्ड क्लोन वाले टाइप (जैसे, BigInt) भेजने की कोशिश करने पर, मैसेज आपके एक्सटेंशन के कॉन्टेक्स्ट से निकलने से पहले ही गड़बड़ी दिखेगी.

toJSON() तरीके

अगर कस्टम सीरियलाइज़ेशन करने के लिए, toJSON() के कस्टम तरीकों वाली क्लास या ऑब्जेक्ट का इस्तेमाल किया जाता है (उदाहरण के लिए, किसी ऑब्जेक्ट को भेजने से पहले पासवर्ड हटाकर डेटा को सैनिटाइज़ करना), तो ध्यान रखें कि स्ट्रक्चर्ड क्लोन, toJSON() को इग्नोर करता है. यह प्रॉपर्टी की वैल्यू को सीधे कॉपी करता है. अगर कस्टम सीरियलाइज़ेशन के लिए toJSON() का इस्तेमाल किया जाता है, तो भेजने से पहले कुछ काम मैन्युअल तरीके से करना पड़ सकता है. उदाहरण के लिए:

class User {
  constructor(name, password) {
    this.name = name;
    this.password = password;
  }

  // This will be ignored by structured clone!
  toJSON() {
    return { name: this.name };
  }
}

const user = new User("Alice", "secret123");

// JSON -> {"name":"Alice"}
// Structured Clone -> { name: "Alice", password: "secret123" }

क्या JSON सीरियलाइज़ेशन बंद किया जा रहा है?

नहीं! Chrome, आने वाले समय में सीरियलाइज़ेशन के दोनों फ़ॉर्मैट के लिए सहायता उपलब्ध कराता रहेगा.

सुझाव, शिकायत या राय दें

हमें उम्मीद है कि इस नई सुविधा से, आपके एक्सटेंशन डेवलपमेंट के लिए बेहतर और ज़्यादा असरदार वर्कफ़्लो मिलेंगे.

हमने स्ट्रक्चर्ड क्लोन को लागू करने की सुविधा की पुष्टि करने के लिए, एक टेस्ट सुइट बनाया है. हालांकि, वेब प्लैटफ़ॉर्म पर कई तरह के ऑब्जेक्ट मौजूद हैं. इस नई सुविधा को आज़माएं और आपको मिलने वाली किसी भी गड़बड़ी या एज केस के बारे में हमें बताएं ! आपके सुझाव या राय से, हमें पूरी कम्यूनिटी के लिए इस सुविधा को बेहतर बनाने में मदद मिलेगी.