google-chrome-extension
संदेश देना
खोज…
टिप्पणियों
आधिकारिक दस्तावेज
- संदेश देना
- मूल संदेश
-
chrome.runtime
API (अधिकांश मैसेजिंग फ़ंक्शन और सभी मैसेजिंग इवेंट)
एसिंक्रोनस रूप से प्रतिक्रिया भेजें
chrome.runtime.onMessage
रूप से chrome.runtime.onMessage
कॉलबैक से प्रतिक्रिया भेजने के प्रयास में हम इस गलत कोड को आज़मा सकते हैं :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data won't be sent
sendResponse(data);
},
});
});
हालाँकि, हम पाएंगे कि data
कभी नहीं भेजा जाता है। ऐसा इसलिए होता है क्योंकि हमने एक अतुल्यकालिक अजाक्स कॉल के अंदर sendResponse
डाल दिया है, जब success
विधि निष्पादित की जाती है, तो संदेश चैनल बंद कर दिया गया है।
समाधान सरल होगा, जब तक हम स्पष्ट रूप से return true;
कॉलबैक के अंत में, जो इंगित करता है कि हम एसिंक्रोनस रूप से एक प्रतिक्रिया भेजना चाहते हैं, इसलिए संदेश चैनल को दूसरे छोर (कॉलर) के लिए खुला रखा जाएगा जब तक कि sendResponse
निष्पादित न हो जाए।
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
});
बेशक, यह ऑनमैसेज कॉलबैक से एक स्पष्ट return
पर भी लागू होता है:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action == 'get') {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
}
// do something synchronous, use sendResponse
// normal exit closes the message channel
});
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow