8

मैं पिछले कुछ हफ्तों में कुछ ब्राउज़र एक्सटेंशन लिख रहा था और आज तक मैंने सोचा कि Firefox के लिए एक WebExtension क्रोम में काफी स्वचालित रूप से काम करना चाहिए। तो मैंने मोज़िला के उदाहरणों के अनुसार अपना कोड लिखने की कोशिश की।
लेकिन आज मुझे एहसास हुआ कि क्रोम एक्सटेंशन के लिए एपीआई दस्तावेज में वादे का कोई उल्लेख नहीं है।
मैंने अपने सभी एक्सटेंशन के लिए कोड में सख्ती से वादा किया है।क्रोम एक्सटेंशन API के लिए वादा समर्थन?

तो अब मेरे सवाल का, Chrome में अपनी कोड काम करेगा? या अगर मैं शीर्ष पर var browser = chrome घोषणा जोड़ता हूं तो यह काम करेगा?
या क्या क्रोम एपीआई पर वादे का समर्थन नहीं करता है?
क्रोम अभी तक एपीआई कार्यों पर वादे का समर्थन नहीं करता है, यह उन्हें भविष्य में समर्थन करेंगे?

ध्यान दें, मैं इस परियोजना के बारे में पता कर रहा हूँ: https://github.com/mozilla/webextension-polyfill
लेकिन मुझे लगता है कि लाइब्रेरी हर जगह सहित की परेशानी के माध्यम से जाने के लिए तैयार नहीं हूँ। इसके अलावा, इसमें कष्टप्रद कीड़े हैं।

और इसके अलावा मैं क्रोम या क्रोमियम की जरूरत नहीं है और मैं उन्हें गोपनीयता और सुरक्षा कारणों के लिए स्थापित नहीं कर सकता।

+1

हाँ, के रूप में आप polyfill विवरण में देख सकते हैं, यह क्रोम में आवश्यक है। भविष्य के लिए, काम अभी तक शुरू नहीं हुआ है। हालांकि https://crbug.com पर कोई समस्या है। – wOxxOm

+3

https://crbug.com/328932 –

उत्तर

3

... आज तक मैंने सोचा कि फ़ायरफ़ॉक्स के लिए वेब एक्सटेंशन को क्रोम में बहुत अधिक स्वचालित रूप से काम करना चाहिए।

वेब एक्सटेंशन को क्रोम एक्सटेंशन के साथ पिछड़े संगतता के साथ बनाया गया था। chrome.* समर्थित एपीआई के लिए नेमस्पेस उपलब्ध है। लक्ष्य यहां पारिस्थितिकी तंत्र को बूटस्ट्रैप करने के लिए मौजूदा एक्सटेंशन को एफएफ में पोर्ट करना आसान बनाना है।

हालांकि, मोज़िला browser.* नाम स्थान के साथ आगे संगतता की उपेक्षा। मोज़िला ने एपीआई के लिए एक वादे-आधारित दृष्टिकोण के साथ जाने का फैसला किया, लेकिन केवल उस नए नामस्थान के लिए।

तो अब मेरा सवाल है, क्या मेरा कोड क्रोम में काम करेगा?
या अगर मैं बहुत शीर्ष पर एक var browser = chrome घोषणा जोड़ने यह काम करेगा?

नहीं; वे अलग-अलग व्यवहार करते हैं और अलग-अलग हस्ताक्षर होते हैं। क्रोम आवश्यक कॉलबैक के बिना कॉल अस्वीकार कर देगा। browser.* वेरिएंट इसके बजाए एक वादा छोड़ देंगे।

या क्या क्रोम एपीआई पर वादे का समर्थन नहीं करता है?
यदि क्रोम अभी तक एपीआई कार्यों पर वादा का समर्थन नहीं करता है, तो क्या यह भविष्य में उनका समर्थन करेगा?

टिप्पणियों में उल्लिखित, एपीआई is considered by Chrome का वादा-आधारित पुनर्लेख, लेकिन कोई दृश्य कार्य नहीं किया गया है। हालांकि, वहाँ poly12ills मौजूद हैं, the one you mentioned सहित। अपनी खुद की पॉलीफिल बनाने के लिए खुद को लपेटने के तरीकों के अलावा, कोई अन्य समाधान नहीं है।

और इसके अलावा मैं क्रोम या क्रोमियम की जरूरत नहीं है और मैं उन्हें गोपनीयता और सुरक्षा कारणों के लिए स्थापित नहीं कर सकता।

फिर आप अपने बंदरगाहों का ठीक से परीक्षण नहीं कर सकते; यह आपके संभावित उपयोगकर्ताओं के लिए एक अच्छा दृष्टिकोण नहीं है।आप इस मामले में पोर्टिंग से बेहतर हैं।

0

मैंने इस पुस्तकालय को https://github.com/lawlietmester/webextension बनाया है ताकि इसे बिना किसी सामान्य नियम के बना दिया जा सके जैसे कि Webextension-polyfill।

मेरी लाइब्रेरी मूल क्रोम/ब्राउज़र के संशोधन के बिना Browser ऑब्जेक्ट बनाने के लिए क्रॉसब्रोसर तरीका है। पुराने समय में jQuery की तरह।

इसका इस्तेमाल करने के लिए केवल एक बार - पृष्ठभूमि प्रक्रिया में आयात और

(typeof browser === 'undefined' ? chrome : browser).extension.getBackgroundPage().Browser

0

से यह पृष्ठभूमि के लिए वैश्विक है, तो (उदाहरण के लिए पॉपअप से) अन्य आयात का उपयोग आयात के लिए कर मैंने देखा नहीं किया है browser एपीआई पर, इसलिए मैं ऑफ-बेस हो सकता हूं, लेकिन अगर केवल अंतर यह है कि फ़ायरफ़ॉक्स एपीआई कॉलबैक का उपयोग करने के बजाए वादे वापस लेते हैं, तो chrome-promise लाइब्रेरी मदद करने में सक्षम हो सकती है। यह उन सभी एपीआई कॉलों को लपेटता है जिनके लिए कार्यों में कॉलबैक की आवश्यकता होती है जो बदले में वादे वापस करते हैं।

फिर आप Chrome में कुछ इस तरह कर सकता है:

var browser = new ChromePromise(); 

और फिर बनाने के वादे कॉल:

browser.storage.local.get(null).then(data => console.log(data)); 
संबंधित मुद्दे