फ़ायरफ़ॉक्स एडॉन्स: मंच के आधार पर डिफ़ॉल्ट वरीयताओं को कैसे सेट करें?

मैं मोज़िला फ़ायरफ़ॉक्स के लिए एक एडन बना रहा हूं, और प्राथमिकताओं में से एक फ़ाइल सिस्टम में फ़ाइलपैथ है (विशेष रूप से, निष्पादन योग्य फ़ाइल या वीएलसी प्लेयर के लिए कमांड)। वह फ़ाइलपाथ वरीयता विंडो के माध्यम से बदल सकता है, लेकिन उस वरीयता के लिए डिफ़ॉल्ट मान का एक जोड़ा उपयोगी होगा।

चूंकि एडन को लिनक्स और विंडोज ऑपरेटिंग सिस्टम दोनों पर काम करना है, इसलिए मेरी इच्छा है कि प्रत्येक ऑपरेटिंग सिस्टम के लिए डिफ़ॉल्ट फ़ाइलपैथ शामिल करें, इसलिए यह ऐसा कुछ दिखाई देगा:

Linux: /usr/bin/vlc

Windows x86 C:\\Program Files\\VideoLan\\VLC\\vlc.exe

विंडोज x86_64 <कोड> सी: \\ प्रोग्राम फ़ाइलें (x86) \\ VideoLan \\ वीएलसी \\ vlc.exe (चूंकि डिफ़ॉल्ट वीएलसी स्थापना हमेशा 32-बिट होगी)

क्या इसको हासिल करने के लिए कोई रास्ता है? अब तक मैं वरीयता का वर्णन करने वाली एक defaults.js फ़ाइल डाल सकता हूं (उदाहरण के लिए लिनक्स के लिए):

pref ("extension.vlc_shortcut.vlc_filepath", "/ usr/bin/vlc");

वह फ़ाइल my_extension/डिफ़ॉल्ट/प्राथमिकताएं/defaults.js में स्थित है, मैंने फ़ाइल में if-else बयान डालने का प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं है। अगर मैंने कथन दिया तो मैंने निम्नलिखित को भी डालने का प्रयास किया:

if(true)
    pref("extensions.vlc_shortcut.vlc_filepath", "/usr/bin/vlc");

लेकिन यह सब कुछ अनदेखा करता है, जैसे कि यह एक खाली फ़ाइल है।

0

1 उत्तर

नहीं, आप डिफ़ॉल्ट प्राथमिकताओं में प्लेटफ़ॉर्म-विशिष्ट मान सेट नहीं कर सकते हैं। डिफ़ॉल्ट प्राथमिकताओं पर MDN आलेख के मुताबिक:

वास्तविक फ़ाइल, .js एक्सटेंशन होने के बावजूद, एक जावास्क्रिप्ट फ़ाइल नहीं है। आप इसके अंदर चर सेट नहीं कर सकते हैं, न ही किसी भी प्रकार का प्रोग्राम फ्लो कंट्रोल (आईएफएस, लूप इत्यादि) कर सकते हैं और न ही गणना मूल्य (यानी 3600 * 24 * 5)। ऐसा करने से मोज़िला किसी भी अधिसूचना, चेतावनी, त्रुटि, या अपवाद के बिना आपकी प्राथमिकताओं फ़ाइल को संसाधित करना बंद कर देगा। एक .ini फ़ाइल के रूप में इसे और अधिक सोचें। टिप्पणियां पूरी तरह से स्वीकार्य हैं।

होस्ट ओएस और पथ को निर्धारित करने के लिए nsIXULRuntime का उपयोग करने का एक और तरीका है।

एमडीएन से उदाहरण यहां दिया गया है:

var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime);

alert(xulRuntime.OS);

अगर वांछित है, तो आप प्राथमिकता API का उपयोग करके पथ को वरीयता के रूप में सहेज सकते हैं।

विचार करने का एक और विकल्प बंडल करना है (यदि लाइसेंस अनुमति देता है), इस मामले में आप प्लेटफॉर्म-विशिष्ट फाइलें

0
जोड़ा
टिप्पणी के संबंध में, "नहीं, आप प्लेटफॉर्म-विशिष्ट मानों को डिफ़ॉल्ट वरीयताओं में सेट नहीं कर सकते हैं।", तकनीकी रूप से, आप कर सकते हैं, हालांकि इसे कुछ अपरंपरागत, अशुद्ध, या अक्षम, आदि के रूप में फेंक दिया जा सकता है। तर्क के लिए, विकल्प .vlc_filepath_linux , .vlc_filepath_winx86 , .vlc_filepath_winx64 । प्लेटफॉर्म-विशिष्ट डिफ़ॉल्ट नाम xulRuntime.OS के आउटपुट से मेल खाते हैं, लेकिन यह आपको यह निर्धारित करने में मदद नहीं कर सकता कि आप x86 या x64 पर हैं या नहीं, क्योंकि यह बस WINNT । किसी भी मामले में, चाहे आप डिफ़ॉल्ट पथ क
जोड़ा लेखक user314159, स्रोत
आप दोनों को शुक्रिया। मैं घटकों और मॉड्यूल में थोड़ा सा शोध करने गया, और अभी मैं डिफ़ॉल्ट वरीयताओं को सेट करने के लिए उन्हें एक समाधान के रूप में बाहर करने की कोशिश कर रहा हूं। और मैं Services.jsm का उपयोग करूंगा।
जोड़ा लेखक Milan Kosanović, स्रोत
जोड़ा लेखक nmaier, स्रोत
एक के लिए, Services.jsm गेटर्स कैश किए गए हैं (ज्ञापन), इसलिए आप .getService() के ओवरहेड से बचें और जावास्क्रिप्ट XPConnect wrappers कचरा बाद में एकत्रित होने के ऊपरी हिस्से से बचें। उस ओवरहेड शायद इस मामले में नगण्य होगा, क्योंकि यह केवल एक ही कॉल है। ऐसे मामले हैं जहां यह मायने रखता है, हालांकि। मेरे लिए हत्यारे का तर्क किसी ऐसे व्यक्ति के रूप में है जिसने कुछ हज़ार ऐड-ऑन कोड समीक्षा की है, वह पठनीयता है।
जोड़ा लेखक nmaier, स्रोत
टिप के लिए धन्यवाद, @nmaier! क्या आप थोड़ा सा कह सकते हैं कि Services.jsm का उपयोग करना बेहतर क्यों है?
जोड़ा लेखक christi3k, स्रोत