मुझे जावास्क्रिप्ट से एक्सटेंशन स्थापित निर्देशिका का पथ प्राप्त करने की आवश्यकता है।एक्सटेंशन की निर्देशिका कैसे निर्धारित करें
मेरा लक्ष्य किसी फ़ायरफ़ॉक्स एक्सटेंशन से एक्सटेंशन निर्देशिका में JSON फ़ाइल को लिखना है। ऐसा करने के लिए, मुझे उस निर्देशिका को निर्धारित करने की आवश्यकता है जिसमें फ़ायरफ़ॉक्स प्रोफ़ाइल के भीतर एक्सटेंशन इंस्टॉल किया गया हो।
function writeToFile()
{
var id = "[email protected]";// The extension's id from install.rdf(i.e. <em:id>)
var ext = Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager)
.getInstallLocation(id)
.getItemLocation(id);
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(ext.path);
file.append("config.json");
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
var data = '[ {"id" : "2"} ]';
foStream.write(data, data.length);
foStream.close();
यह निम्न त्रुटि फेंकता है:
मैं इस कोड का उपयोग
TypeError:Components.classes['@mozilla.org/extensions/manager;1'] is undefined.
मैं अनिवार्य रूप से जावास्क्रिप्ट से स्वचालित रूप से विस्तार की राह पाने के लिए की जरूरत है। मैंने अपने एक्सटेंशन की आईडी की दोबारा जांच की और मैंने भाग्य के साथ अन्य एक्सटेंशन से फ़ाइलों को लिखने का भी प्रयास किया।
आपके उत्तरों के लिए बहुत बहुत धन्यवाद। यह मुझे तुरंत मेरी समस्या को हल करने नहीं दिया लेकिन यह मुझे मोज़िला दस्तावेज पढ़ने के लिए मजबूर कर दिया। आखिरकार मुझे यह पता चला कि यह कैसे काम करता है। एक बार फिर धन्यवाद। उपर्युक्त प्रश्न पर
समाधान:
Components.utils.import("resource://gre/modules/AddonManager.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
AddonManager.getAddonByID("plugin_id", function(addon) {
var uri = addon.getResourceURI("config.json");
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
var stringUri = uri.asciiSpec;
stringUri = stringUri.replace(new RegExp(/\//g), '\\');
stringUri = stringUri.slice(8);
alert(stringUri);
file.initWithPath(stringUri);
alert(addon.hasResource("config.json"));
var stream = FileUtils.openFileOutputStream(file,
FileUtils.MODE_WRONLY
| FileUtils.MODE_CREATE
| FileUtils.MODE_TRUNCATE);
stream.write(dataToWrite, dataToWrite.length);
stream.close();
मुझे लगता है कि आप सुनिश्चित करें कि आपके एक्सटेंशन यह निर्देशिका स्थापित है करने के लिए फ़ाइलों लिखने के लिए अनपैक किया है की आवश्यकता होगी। – erikvold
ताकि आप फ़ाइल को उपयोगकर्ता की प्रोफाइल निर्देशिका में सहेजना चाहें। – erikvold