2012-11-14 42 views
6

मैं एडन एसडीके का उपयोग करके फ़ायरफ़ॉक्स एक्सटेंशन विकसित कर रहा हूं और एक ही पैकेज में संग्रहीत कुछ डेटा लोड करने की आवश्यकता है, एक अलग फ़ाइल के रूप में: "डेटा .json "। इसे किसी पृष्ठ स्क्रिप्ट से लोड किया जाना चाहिए, यानी "loader.js" जो स्क्रिप्ट src टैग का उपयोग करके "panel.html" में शामिल है।फ़ायरफ़ॉक्स एडोन पेज स्क्रिप्ट में एक JSON फ़ाइल लोड हो रहा है, पैकेज के भीतर स्थानीय रूप से सबकुछ

संरचना इस तरह है:

+data 
panel.html 
panel.js 
loader.js 
data.json 
... 
+lib 
main.js 
... 

panel.html है:

<script type="text/javascript" src="loader.js"></script> 

शुरू में हम "data.js" के रूप में केवल एक js फ़ाइल में डेटा संग्रहीत और से शामिल " panel.html "स्क्रिप्ट src टैग का उपयोग करके और यह किसी भी समस्या के बिना काम किया। हालांकि जब हमने मोज़िला एडन साइट पर एड-ऑन सबमिट किया था, तो इसे ठीक करने के लिए एक समस्या के रूप में संबोधित किया गया था, जिसमें कहा गया था कि हमें एक गैर निष्पादन योग्य प्रारूप, जैसे JSON फ़ाइल को अधिक सुरक्षित बनाने के लिए उपयोग करने की आवश्यकता है।

अब समस्या "loader.js" को "data.json" को AJAX अनुरोध करने की अनुमति नहीं है। (JQuery $ .ajax() कॉल रिटर्न का कोई सफलता नहीं है, त्रुटि कोड दे रहा है 0) तो जिस समाधान का मैं सोच रहा हूं वह है "एसडीके के अनुरोध() फ़ंक्शन का उपयोग करके" main.js "से" data.json "लोड करना और किसी भी तरह इसे "loader.js", पेज स्क्रिप्ट को पास कर दें। लेकिन जब तक मैं समझता हूं, तब से जटिल हो रहा है, डेटा को पहले सामग्री स्क्रिप्ट पर भेजा जाना चाहिए, और फिर वहां से पृष्ठ स्क्रिप्ट तक। और पृष्ठ स्क्रिप्ट लोड होने पर यह होने की आवश्यकता है! मैं इस बारे में उलझन में हूं क्योंकि मुझे यकीन नहीं है कि क्या मुझे एक और अधिक व्यावहारिक समाधान याद आ रहा है, या क्या यह वास्तव में कुछ जटिल है जो मैं करने की कोशिश कर रहा हूं, बस पैकेज में स्थानीय JSON डेटा को स्थानीय पेज स्क्रिप्ट में लोड कर रहा हूं?

उत्तर

7

यहां एड-ऑन बिल्डर पर एक उदाहरण है जो इसकी खोज करता है और उससे संपर्क करता है।

सबसे पहले, आप डेटा से json फ़ाइल लोड और self.data.load का उपयोग कर इसे पार्स कर सकते हैं: तुल्यकालिक

let data = require('self').data; 

let taps_data = JSON.parse(data.load('taps.json')); 

यह भार, तो यह कुछ आप अक्सर क्या करना चाहते हैं नहीं है में, उदाहरण यह तब होता है जब ऐड-ऑन firsst ब्राउज़िंग सत्र में सक्रिय हो जाता है।

अगला, आप सामग्री स्क्रिप्ट और पैनल में डेटा पास करने के लिए गुजरने वाले संदेश का उपयोग करेंगे।

main.js स्क्रिप्ट में:

panel.on('show', function() { 
    if (!loaded) 
     panel.port.emit('taps-data', taps_data); 
}); 

सामग्री स्क्रिप्ट में:

self.port.on('taps-data', function(data) { 
    $('#list').html(''); 
    data.forEach(function(item) { 
     $('#list').append('<div>'+ item.name +'</div>'); 
    }); 
    self.port.emit('taps-loaded'); 
}); 

मैं अतिरिक्त काम का एक सा यकीन है कि मैं केवल डेटा एक बार उत्सर्जन कर रहा हूँ बनाने के लिए करते हैं। डेटा, एफवाईआई, my local pub से लाइव बीयर केईजी डेटा एपीआई से बचाया गया है।