2010-04-21 16 views
8

के साथ सीएसएस सम्मिलित करना मैं एक फ़ायरफ़ॉक्स एक्सटेंशन बना रहा हूं जो किसी वेबसाइट के कुछ पृष्ठों पर HTML तत्व जोड़ता है। मैं उन तत्वों को स्टाइल करने के लिए एक कस्टम सीएसएस फ़ाइल डालना चाहता हूं। यह काम करता है अगर मैं पृष्ठ पर सीधे सीएसएस के साथ टैग डालता हूं, लेकिन यह आदर्श समाधान से कम है।फ़ायरफ़ॉक्स एक्सटेंशन

क्या सीएसएस फ़ाइल को लोड और पार्स करने के लिए वैसे भी है, जैसे कि मैंने हेडर में टैग का उपयोग किया है, या क्या मैं इसे किसी भी तरह से रेखांकित कर रहा हूं?

+0

फ़ायरफ़ॉक्स एक्सटेंशन डेवलपर टूलबार आपको सीएसएस मेनू प्रविष्टि के भीतर "उपयोगकर्ता स्टाइल शीट जोड़ें" देता है और लोड किए गए पृष्ठ पर तुरंत शैलियों को लागू करता है। ऐसा लगता है कि आप चाहते हैं कि कार्यक्षमता। शायद आप वहाँ चुपके कर सकते हैं। https://addons.mozilla.org/de/firefox/addon/60 –

+0

यदि आप इसे इनलाइन करते हैं, तो ब्राउज़र स्वचालित रूप से ... लोड और पार्स कर देगा। मुझे उस दृष्टिकोण के साथ समस्या दिखाई नहीं दे रही है, अगर यह आपको वांछित प्रभाव दे रही है। वैसे यह http://stackoverflow.com/questions/2731736/how-can-a-firefox-extension-inject-a-local-css-file-into-a-webpage – MatrixFrog

उत्तर

17

क्रोम: // काम नहीं करेगा क्योंकि जिस पृष्ठ में आप डालने वाले पेज को उसके डोमेन के बाहर फ़ाइलों (क्रोम यूआरआई समेत) तक पहुंचने की अनुमति नहीं है। यह सच भी है कि आप लिंक को सम्मिलित करने वाले भी हैं, क्योंकि लिंक अभी भी लक्षित पृष्ठ के संदर्भ में निष्पादित है। इसके बजाय आपके पास दो विकल्प हैं:

आप अपने मैनिफेस्ट में संसाधन प्रोटोकॉल उपनाम परिभाषित कर सकते हैं और फिर सीएसएस तक पहुंचने के लिए संसाधन यूआरआई का उपयोग कर सकते हैं। उदाहरण के लिए, निम्नलिखित chrome.manifest आप resource://myextresource/myfile.css के रूप में सीएसएस डालने के लिए अनुमति देगा:
content myext content/
resource myextresource content/css/
अधिक जानकारी के लिए MDN Chrome registration देखें। इसी तरह के प्रश्न के लिए How can a Firefox extension inject a local css file into a webpage? भी देखें।

या, आप निम्न का उपयोग कर सीएसएस को यूएसER_एसएचईईटी के रूप में जोड़ सकते हैं। यह आपके सीएसएस को सभी पृष्ठों पर उपलब्ध कराएगा, इसलिए सुनिश्चित करें कि आप बहुत ही अद्वितीय चयनकर्ताओं का उपयोग करते हैं। इस दृष्टिकोण के साथ एक चेतावनी यह है कि पेज सीएसएस में उपयोगकर्ता शीट्स की प्राथमिकता है। आप इसका उपयोग कर सकते हैं! इसे ओवरराइड करने के लिए महत्वपूर्ण है, लेकिन पेज सीएसएस अभी भी आपको ट्रम्प कर सकता है यदि यह उपयोग करता है! महत्वपूर्ण भी।

var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"] 
    .getService(Components.interfaces.nsIStyleSheetService); 
var ios = Components.classes["@mozilla.org/network/io-service;1"] 
    .getService(Components.interfaces.nsIIOService); 
var uri = ios.newURI(url, null, null); 
sss.loadAndRegisterSheet(uri, sss.USER_SHEET); 
+0

का संभावित डुप्लिकेट है, url' 'var uri = ios.newURI (url, null, null) में;'। जो मैं वास्तव में पूरा करना चाहता हूं वह एक विशेष पृष्ठ में jquery UI कस्टम सीएसएस डालना है। क्या मैं आपके द्वारा सुझाए गए दूसरे विकल्प का उपयोग करके ऐसा करने में सक्षम हूं? क्या मैं इसे एफएफ एडन बिल्डर (एसडीके का उपयोग किए बिना) का उपयोग कर सकता हूं ?? –

+0

यूआरएल एक स्थानीय सीएसएस फ़ाइल का मार्ग है। मेरा मानना ​​है कि आप संसाधन: //, क्रोम: //, फ़ाइल: // का उपयोग कर सकते हैं क्योंकि आप इसे विश्वसनीय कोड से कॉल कर रहे हैं। – studgeek

+0

मैंने ऐड-ऑन बिल्डर का व्यक्तिगत रूप से उपयोग नहीं किया है, लेकिन यह कहता है कि आप इस पृष्ठ के निचले हिस्से में XPCOM एपीआई (जो मैं दूसरे उदाहरण में दिखा रहा हूं) को कॉल कर सकता हूं - https://addons.mozilla.org/ en-US/डेवलपर्स/डॉक्स/SDK/नवीनतम/dev-गाइड/गाइड/एसडीके-बनाम-xul.html। – studgeek

संबंधित मुद्दे