पब्लिश होने की तारीख: 13 अप्रैल, 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 काम नहीं करता. हालांकि, आपको इन स्थितियों में 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
});
ज़्यादा तरह के कोड इस्तेमाल किए जा सकते हैं
स्ट्रक्चर्ड क्लोन, अन्य टाइप के साथ काम करता है. जैसे, File और Blob.
बीटा टेस्टिंग कार्यक्रम में शामिल होने का तरीका
यह सुविधा ऑप्ट-इन है, ताकि यह पक्का किया जा सके कि यह सुविधा पुराने वर्शन के साथ काम करती है और मौजूदा एक्सटेंशन में कोई गड़बड़ी नहीं होती है. अपने एक्सटेंशन के लिए इसे ग्लोबल लेवल पर चालू किया जा सकता है. इसके लिए, आपको manifest.json में एक कुंजी जोड़नी होगी:
{
"name": "My Extension",
"version": "1.0",
"manifest_version": 3,
"message_serialization": "structured_clone"
}
अगर इसे शामिल नहीं किया जाता है या Chrome का वर्शन 148 से कम है, तो ब्राउज़र एक्सटेंशन के लिए JSON पर आधारित मौजूदा सेटिंग को डिफ़ॉल्ट रूप से इस्तेमाल करता है.
स्ट्रक्चर्ड क्लोन एल्गोरिदम के साथ काम करने की सुविधा उपलब्ध कराने से, हम एक्सटेंशन मैसेजिंग एपीआई को वेब प्लैटफ़ॉर्म की स्टैंडर्ड सुविधाओं के साथ बेहतर तरीके से काम करने में मदद कर रहे हैं. यह सुविधा, postMessage की तरह है, जिसका इस्तेमाल वेब वर्कर और iframe कम्यूनिकेशन में किया जाता है. इससे आपको ज़्यादा सुविधा और कंट्रोल मिलता है.
इंटरऑपरेबिलिटी और गॉटचा
स्ट्रक्चर्ड क्लोन सीरियलाइज़ेशन, JSON के मुकाबले कई तरह के डेटा के साथ काम करता है. हालांकि, आपको कुछ आर्किटेक्चरल मान्यताओं और लागू करने से जुड़ी समस्याओं के बारे में पता होना चाहिए.
काम न करने वाले टाइप
शेयर किए गए ऑब्जेक्ट, जैसे कि SharedArrayBuffer और ArrayBuffer जैसे ऑब्जेक्ट ट्रांसफ़र करने की सुविधा, हमारे साथ काम नहीं करती.
SharedArrayBuffer को सीरियल में नहीं बदला जा सकेगा या सीरियल से नहीं हटाया जा सकेगा (यह स्थिति के हिसाब से तय होगा). साथ ही, SharedArrayBuffer जैसे ट्रांसफ़र किए जा सकने वाले ऑब्जेक्ट को भेजने की कोशिश करने पर, उसकी कॉपी भेजी जाएगी.Uint8Array
एक्सटेंशन से एक्सटेंशन के बीच कम्यूनिकेशन
हम डेटा की इंटिग्रिटी बनाए रखने के लिए, मैचिंग सीरियलाइज़ेशन फ़ॉर्मैट लागू करते हैं. सीरियलाइज़ेशन फ़ॉर्मैट के मेल न खाने पर, एक्सटेंशन runtime.sendMessage या runtime.connect के ज़रिए सीधे तौर पर कम्यूनिकेट नहीं कर सकते. उदाहरण के लिए, अगर एक्सटेंशन A, JSON सीरियलाइज़ेशन का इस्तेमाल करता है और स्ट्रक्चर्ड क्लोन का इस्तेमाल करके एक्सटेंशन B को मैसेज भेजने की कोशिश करता है, तो मैसेज नहीं भेजा जा सकेगा और पोर्ट बंद हो जाएगा. इसके उलट भी हो सकता है.
वेब पेज कम्यूनिकेशन
externally_connectable का इस्तेमाल करने वाले वेब पेज, टारगेट एक्सटेंशन के सीरियलाइज़ेशन फ़ॉर्मैट के हिसाब से अपने-आप अडजस्ट हो जाएंगे. अगर आपका एक्सटेंशन स्ट्रक्चर्ड क्लोन का इस्तेमाल करता है, तो runtime API का इस्तेमाल करके मैसेज भेजने वाले वेब कॉन्टेक्स्ट, अपने-आप स्ट्रक्चर्ड क्लोन का इस्तेमाल करेंगे. इसके उलट, अगर आपका एक्सटेंशन स्ट्रक्चर्ड क्लोन का इस्तेमाल नहीं करता है, तो runtime API का इस्तेमाल करके मैसेज भेजने वाले वेब कॉन्टेक्स्ट, स्ट्रक्चर्ड क्लोन का इस्तेमाल नहीं करेंगे. इसका मतलब है कि वेब साइट और एक्सटेंशन को, सीरियलाइज़ेशन से जुड़ी गड़बड़ियों को रोकने के लिए, सीरियलाइज़ेशन के अनुमानित फ़ॉर्मैट में सिंक होना चाहिए.
नेटिव मैसेज सेवा
नेटिव मैसेजिंग चैनल, हमेशा 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, आने वाले समय में दोनों सीरियललाइज़ेशन फ़ॉर्मैट के साथ काम करता रहेगा.
सुझाव, शिकायत या राय दें
हमें उम्मीद है कि इस नई सुविधा से, आपको एक्सटेंशन डेवलप करने में आसानी होगी और आप बेहतर तरीके से काम कर पाएंगे.
हमने स्ट्रक्चर्ड क्लोन लागू करने की सुविधा की पुष्टि करने के लिए, एक टेस्ट सुइट बनाया है. हालांकि, वेब प्लैटफ़ॉर्म पर कई तरह के ऑब्जेक्ट मौजूद हैं. इस नई सुविधा को आज़माएँ और अगर आपको कोई गड़बड़ी या मुश्किल समस्या मिलती है, तो रिपोर्ट करें! आपके सुझाव, शिकायत या राय से, हमें इस सुविधा को सभी के लिए बेहतर बनाने में मदद मिलेगी.