मैं क्रोम एक्सटेंशन में नाम मान जोड़े सेट करने और प्राप्त करने के लिए निम्न कोड का उपयोग करने का प्रयास कर रहा हूं।Chrome.storage API का उपयोग करके प्रतिक्रिया देने के लिए मैं जावास्क्रिप्ट फ़ंक्शन की प्रतीक्षा कैसे करूं?
if (!this.Chrome_getValue || (this.Chrome_getValue.toString && this.Chrome_getValue.toString().indexOf("not supported") > -1)) {
this.Chrome_getValue = function (key, def) {
chrome.storage.local.get(key, function (result) {
return result[key];
});
};
this.Chrome_setValue = function (key, value) {
var obj = {};
obj[key] = value;
return chrome.storage.local.set(obj)
}
}
मैं तो के रूप में इन लागू कर रहा हूँ इस प्रकार है:
Chrome_setValue("City", "London");
var keyValue = Chrome_getValue("City");
समस्या keyValue हमेशा 'अनिर्धारित' है, भले ही मैं मूल्य वापस पढ़ने का प्रयास में 1 सेकंड की देरी डाल है। मैं समझता हूं क्योंकि यह 'chrome.storage.local.get' फ़ंक्शन एसिंक्रोनस है .. निम्न कोड ठीक काम करता है।
Chrome_setValue("City", "London");
chrome.storage.local.get("City", function (result) {
alert(result["City"]);
});
वहाँ किसी भी तरह से keyValue बाध्यकारी जब (get
उपयोग करते हुए) मैं कोड समारोह के लिए प्रतीक्षा करने के लिए एक प्रतिक्रिया वापस करने के लिए मजबूर कर सकता है? या शायद मैं गलत कोण से यह आ रहा हूं। अनिवार्य रूप से मैं क्रोम.स्टोरेज ढांचे के भीतर डेटा को संभालने के लिए set
और get
विधियों को सारणित करने के तरीके की तलाश कर रहा हूं? आदर्श रूप से दो सरल फ़ंक्शंस मैं नाम मूल्य जोड़ों को सेट करने और पुनर्प्राप्त करने के लिए कॉल कर सकता हूं।
इससे पहले कि मैं स्थानीय स्टोरेज का उपयोग कर रहा था जो बहुत सरल था।
//Set
localStorage["City"] = "London";
//Get
var keyValue = localStorage["City"];
धन्यवाद बीटरूट, यह बहुत रचनात्मक है! इसे पोस्ट करने के बाद भी मुझे आश्चर्य हुआ कि क्या मैं इस समस्या को खत्म कर रहा था। प्रभावी रूप से मुझे subdomain1.website.com से subdomain2.website.com पर डेटा जारी रखने के लिए अपने क्रोम एक्सटेंशन की आवश्यकता है, कुछ स्थानीय स्टोरेज नहीं करता है। कई समाधान पृष्ठभूमि.जेएस का उपयोग करते हुए उल्लेख करते हैं, इसलिए अब मैं इस एवेन्यू की खोज कर रहा हूं। – QFDev
परिवर्तनीय रूप से स्टोर करने के लिए क्रोम में किसी भी विधि को एसिंक फ़ंक्शन पर निर्भर करता है! इसलिए ऊपर बताए गए $ deferred() विधि का उपयोग करने से कोई फायदा नहीं हुआ है। मेरी समस्या यह है कि लौटा हुआ dfrd.promise() ऑब्जेक्ट के साथ क्या करना है यह पता लगाना है ... मैं इससे मूल्य कैसे प्राप्त कर सकता हूं? – QFDev
[यह] (http://api.jquery.com/category/deferred-object/) शायद डिफर्रेड और वादे के बारे में सीखने के लिए सबसे अच्छा प्रारंभ बिंदु है। एक मूल्य के साथ काम करने के लिए जिसके साथ एक डिफर्ड (और इसलिए इसका वादा किया गया है) को पुनर्स्थापित किया गया है, हैंडलर (फ़ंक्शंस) को '.then() 'या' .done() 'विधियों के पैरामीटर के रूप में बनाएं। –