मैं वेबइक्स्टेंशन का उपयोग करके कुछ वेबसाइटों पर एक पृथक ओवरले प्रदर्शित करने का एक तरीका ढूंढ रहा हूं।
एक आईफ्रेम इस के लिए जाने का तरीका प्रतीत होता है क्योंकि यह सीएसएस, जेएस और डोम के लिए एक अलग अलग दायरा प्रदान करता है। और एक और साफ बात यह है कि लक्ष्य वेबसाइट सामग्री को पढ़ने या बदलने में सक्षम नहीं होगी।फ़ायरफ़ॉक्स वेब एक्सटेंशन, पृथक HTML ओवरले
क्रोम एक्सटेंशन में जो किसी भी समस्या के बिना संभव प्रतीत होता है, लेकिन फ़ायरफ़ॉक्स में वेब एक्सटेंशन के साथ, भले ही वे एक ही वाक्यविन्यास साझा करते हैं, मुझे सुरक्षा चेतावनियां/त्रुटियां मिलती हैं और यह काम नहीं करती है। एक src विशेषता के बिना
एक iframe बनाना और इंजेक्षन कि वेबसाइट के शरीर में:
मैं दो अलग बातें की कोशिश की है। यह विधि विफल रही क्योंकि मुझे
iframe.contentWindow.document.open()
पर सीएसपी त्रुटियां/चेतावनियां मिलती हैं।
प्रासंगिक सामग्री स्क्रिप्ट कोड:let html = ` <!DOCTYPE html> <html> <head></head> <body> <h1>TEST</h1> </body> </html> ` let iframe = document.createElement('iframe') document.body.appendChild(iframe) iframe.contentWindow.document.open() iframe.contentWindow.document.write(html) iframe.contentWindow.document.close()
दूसरी बात मैंने कोशिश की (जो जिस तरह से अधिक मतलब होगा के रूप में यह सामग्री तक पहुंचने से वेबसाइट को अनुमति नहीं देने हैं), एक फ़ाइल में मेरी iframe कोड डाल करने के लिए किया गया था (
overlay.html
) मेरे वेब एक्सटेंशन में और iframe इसेbrowser.extension.getURL('overlay.html')
पर इसके स्रोत को सेट करके लोड करें।
प्रासंगिक सामग्री स्क्रिप्ट कोड:let iframe = document.createElement('iframe') iframe.src = browser.extension.getURL('overlay.html') document.body.appendChild(iframe)
प्रकट में मैं इस बात के लिए
web_accessible_resources
के रूप में परिभाषित किया गया overlay.html:"web_accessible_resources": [ "overlay.html" ],
उस के बारे में बात यह है कि आइफ्रेम बस लोड नहीं करता है overlay.html फ़ाइल। लेकिन यह निश्चित रूप से उपलब्ध है, अन्यथा
location.href = browser.extension.getURL('overlay.html')
काम नहीं करेगा। अगर यह काम करता तो यह बेहद सुविधाजनक होता, क्योंकि मैं पूरे ओवरले (एचटीएमएल, सीएसएस, जेएस) को अपने एक्सटेंशन में अलग फाइलों के रूप में संग्रहीत कर सकता था। जैसे कि यह एक स्टैंडअलोन वेबसाइट होगी। और सामग्री-स्क्रिप्ट का उपयोग करके मैं इसे नया डेटा जोड़ने या जो कुछ भी जोड़ने के लिए एक्सेस कर सकता था।
संपादित करें:
फिलहाल मैं स्रोत कोड यह (उस के लिए wOxxOm करने के लिए धन्यवाद) को शामिल करना चाहिए स्थापित करने के लिए मेरी iframe की srcdoc
विशेषता का उपयोग कर रहा हूँ। तो कम से कम मेरे पास ऐसा कुछ है जो अब काम करता है। लेकिन मैं इस दृष्टिकोण के बारे में वास्तव में नापसंद करता हूं कि मैं अपनी सामग्री स्क्रिप्ट से आईफ्रेम सामग्री से बातचीत नहीं कर सकता। दिलचस्प बात यह है कि, मैं आईफ़्रेम के जेएस कोड के भीतर से मूल पृष्ठ से बातचीत कर सकता हूं, लेकिन फिर सामग्री स्क्रिप्ट के साथ नहीं। यह भी वास्तव में गन्दा, असुविधाजनक और कठिन है ताकि आप अपने सभी एचटीएमएल, सीएसएस, जेएस कोड को सामान्य वेबसाइट जैसी कई फाइलों के बजाय एक स्ट्रिंग में रख सकें।
हो सकता है कि साइटों को आप एक बहुत ही सीमित सीएसपी को परिभाषित की कोशिश की है? मैं 'iframe.srcdoc' कोशिश करता हूं। शैली अलगाव के लिए आप iframe के बजाय छाया डोम का उपयोग कर सकते हैं। – wOxxOm
धन्यवाद, यह अविश्वसनीय रूप से सहायक था! – Forivin
1) सीएसपी मुद्दे के बारे में: मुझे नहीं लगता कि यह साइट है। यह मेरे लिए फ़ाइल में एक ही त्रुटि देता है: /// सी:/'। मुझे लगता है कि यह विस्तार के अपने सीएसपी से संबंधित है। मैं अभी भी वाक्यविन्यास से अपरिचित हूं, इसलिए समाधान प्रदान नहीं कर सकता। पूरी तरह से समझने के बिना और आप अनजाने में अनुमति दे सकते हैं बिना समझने के सावधान पोकिंग छेद रहें। 2) मैंने फिर तुरंत आईफ्रेम लगाया। डायरेक्ट असाइनमेंट सभी विशेषताओं के लिए समान रूप से काम नहीं करता है, हालांकि 'iframe.src' ने मेरे लिए काम किया है। 'Iframe.setAttribute (विशेषता, मान) के साथ सभी विशेषताओं को निर्दिष्ट करने का प्रयास करें; 'विशेष रूप से, मुझे लगता है कि' कक्षा' समस्याग्रस्त है। – user314159