2012-10-06 18 views
18

<script type="text/plain" src="http://..."></script> का उपयोग करते समय, जहां यूआरएल एक सादे पाठ फ़ाइल को संदर्भित करता है, क्या जावास्क्रिप्ट में फ़ाइल की सामग्री तक पहुंचने का कोई तरीका है? फ़ाइल को ब्राउज़र में स्थानांतरित कर दिया गया है, लेकिन innerHTMLscript तत्व की संपत्ति परिवर्तित नहीं है (यह खाली स्ट्रिंग बनी हुई है)। डीओएम में तत्व नोड का निरीक्षण करना किसी भी संपत्ति को प्रकट नहीं करता है जिसके माध्यम से प्राप्त सामग्री प्राप्त की जा सकती है।जावास्क्रिप्ट में <script type = "text/plain" src = ...> के माध्यम से पुनर्प्राप्त सादे पाठ सामग्री का उपयोग कैसे करें?

मुझे पता है कि XMLHTTPRequest का उपयोग इसके बजाय किया जा सकता है, लेकिन मुझे इस समस्या में रूचि है कि ब्राउज़र ने जिस तरीके से वर्णन किया है, उसमें डेटा क्यों प्राप्त होता है लेकिन ऐसा कोई प्रतीत नहीं होता है।

+0

मुझे लगता है कि आप सभी सामग्री लोड करने के लिए ठीक से इंतजार कर रहे हैं और फिर – Mutahhir

+0

का प्रयास कर रहे हैं, मुझे लगता है कि ब्राउज़र सामग्री को रखने से परेशान नहीं हैं * (शायद ब्राउज़र के कैश में थोड़ी देर के लिए) *। एक बार लिपि का मूल्यांकन हो जाने के बाद, स्रोत की आवश्यकता नहीं है, इसलिए यह स्मृति को बर्बाद कर देगी। –

+1

दिलचस्प बात यह है कि क्रोमियम बाहरी स्क्रिप्ट संसाधनों को डाउनलोड करने के लिए भी परेशान नहीं करता है, टाइप प्रकार विशेषता किसी भी एमआईएम प्रकार के रूप में सूचीबद्ध नहीं है जैसा कि यहां सूचीबद्ध है [http://www.w3.org/TR/html5/the-script-element .html # स्क्रिप्टिंग भाषाएं] तो मुझे आश्चर्य है कि यह सब क्यों करें [http://www.w3.org/TR/html5/the-script-element.html#the-script-block-s-source] – toofast1227

उत्तर

10

सबसे पहले, HTMLScriptElement की विशेषता इनलाइन <script> तत्व के टेक्स्ट तक पहुंचने के लिए पसंदीदा तरीका है। DOM-Level-2 और HTML5: 4.11.1 दोनों संकेत मिलता है कि एक स्क्रिप्ट एक विशेषता text जो स्क्रिप्ट आंतरिक पाठ शामिल होना चाहिए:

आईडीएल विशेषता text सभी पाठ नोड्स script के बच्चे हैं की सामग्री का एक संयोजन लौटना चाहिए तत्व (पेड़ के क्रम में, किसी अन्य नोड्स जैसे टिप्पणियों या तत्वों को अनदेखा करना)। सेटिंग पर, इसे textContent आईडीएल विशेषता के समान कार्य करना चाहिए।

के बाद से <script> तत्व रिक्त है (यदि आप किसी बाहरी स्रोत निर्दिष्ट), text, textContent और innerHTML खाली हैं। इसका कारण यह है text विशेषता केवल इनलाइन स्क्रिप्ट में स्थापित किया जाएगा:

स्क्रिप्ट इनलाइन है और स्क्रिप्ट ब्लॉक के प्रकार एक पाठ आधारित भाषा है:

text आईडीएल विशेषता के मान में जिस समय तत्व "पहले से शुरू हुआ" ध्वज अंतिम सेट था स्क्रिप्ट स्रोत है।

तो यह इस पद्धति का उपयोग एक बाहरी text/plain शामिल करने के लिए संभव नहीं है।

यह भी देखें:

  • W3C: HTML5: 4.11.1 The script element: text attribute और खेल नक्शे के लिए उदाहरण:
    <script src="game-engine.js"></script> <!-- game engine isn't inline --> 
    <script type="text/x-game-map"> <!-- but data needs to be inline --> 
    ........U.........e 
    o............A....e 
    .....A.....AAA....e 
    .A..AAA...AAAAA...e 
    </script> 
    
+1

यह दृढ़ लगता है। यह साबित नहीं करता है कि लोड की गई सामग्री तक पहुंचने का कोई तरीका नहीं है, लेकिन यह बहुत संभव बनाता है। और @ टोफास्ट का उल्लेख है, क्रोम इसे भी लोड नहीं करता है। –

0

हाँ, नहीं, मुझे नहीं लगता कि आप इस तरह की टेक्स्ट सामग्री प्राप्त कर सकते हैं। यह मुख्य रूप से इसलिए है क्योंकि आप कुछ पाठ प्राप्त करने के लिए डोम एक्सेस तत्वों का उपयोग करने जा रहे हैं जिन्हें वास्तव में कभी भी डोम में इंजेक्शन नहीं दिया गया था।

मैंने कुछ विकल्पों की कोशिश की और वे काम नहीं कर पाए। मेरे पास ठोस कारण नहीं है कि आप इसे क्यों नहीं ढूंढ पाएंगे, लेकिन इस कारण मैं इसे छोड़ रहा/सोच रहा हूं क्योंकि वेबकिट इंस्पेक्टर जो मैं उपयोग कर रहा हूं, में त्रिकोण प्रकटीकरण नहीं है एक स्क्रिप्ट-src टैग के बगल में। यह क्या करता है कि यह src को उस लिंक में परिवर्तित करता है जिसे आप क्लिक कर सकते हैं और फिर यह अजाक्स का उपयोग करता है या जो भी सर्वर से उस पाठ को पढ़ने के लिए उपयोग करता है।

6

ध्यान दें कि अगर यह समर्थित थे, यह एक बड़ी सुरक्षा छेद प्रदान करेगा और जेसन और अन्य डेटा की रक्षा करने वाले क्रॉस-साइट स्क्रिप्टिंग सुरक्षा के आसपास होने का माध्यम। अनिवार्य रूप से, मेरा बुरा वेब पेज (nasty.com, कहें) आपके निजी डेटा तक पहुंच सकता है जो स्क्रिप्ट टैग का उपयोग करके इसे लोड करके कुकीज़ द्वारा संरक्षित किया जाता है। जैसे

<script type="text/plain" 
     src="https://supersecure.com/youraccount/privatedocs/list"/> 

supersecure.com के लिए कुकीज़ के बाद स्वचालित रूप से अनुरोध के साथ भेज दिया जाएगा (मामला है जब किसी भी संसाधनों का अनुरोध है के रूप में), सुरक्षित साइट सिर्फ डेटा देता है (उदाहरण के लिए निजी दस्तावेज़ों की सूची) के बाद से यह नहीं कर सके अपने वैध वेबपृष्ठ से AJAX अनुरोध से किसी के अलावा अनुरोध को आसानी से बताएं। यह छेद AJAX के साथ मौजूद नहीं है, क्योंकि ब्राउजर nasty.com से एक पेज को केवल supersecure.com पर AJAX अनुरोध करने से रोक देगा, उसी मूल नीति के लिए धन्यवाद।

जाहिर है, इनलाइन डेटा के साथ कोई सुरक्षा समस्या नहीं है।

3

वही सवाल शोध के कई दिनों के बाद, मैं निम्नलिखित कोड के अनेक उल्लेख पाया:

<html> 
<head> 
<script type="text/javascript"> 
function init(){ 
var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data; 
extText = extText.replace(/[\r\n]/g," "); 
document.forms[0].nMessage.value = extText; 
} 
window.onload=init; 
</script> 
</head> 
<body> 
<iframe name='messageTxt' src='txtData.txt' style='display:none'></iframe> 
<form> 
<textarea name='nMessage'></textarea> 
<input type="button" value="click" onClick="init()"> 
</form> 
</body> 
</html> 

ऊपर कोड वास्तव में txtData.txt फ़ाइल का उपयोग करता है (बशर्ते वह मौजूद है) और एक में यह उदासीनता डिफ़ॉल्ट पाठ के रूप में <textarea>। किसी कारण से, उपर्युक्त प्रतिक्रियाओं में से कोई भी उल्लेख नहीं करता है कि यह काम करता है, मुझे लगता है कि सवाल विशेष रूप से <src> टैग को इंगित करता है (इसी तरह की तकनीक के लिए उपलब्ध नहीं हो सकता है; मैंने चेक नहीं किया है); हालांकि, मुझे अभी भी लगता है कि आपकी क्वेरी का मानना ​​है कि बाहरी क्वेरी .txt फ़ाइल प्राप्त करने के अधिक सामान्य प्रश्न से संबंधित है (या यदि कोई अन्य व्यक्ति जो इस पृष्ठ पर आता है तो सवाल पूछने वाले के लिए पूछताछ कर रहा है), अधिकतर क्योंकि इसमें मुझे शोध करने में घंटों लग गए , इसलिए मुझे विश्वास है कि यह संभव है कि उत्तर देने के लिए उत्तर मुश्किल था।

+0

आप सही हैं, मेरा प्रश्न एक और सामान्य समस्या को दर्शाता है, और 'iframe' का उपयोग उस के लिए एक दिलचस्प दृष्टिकोण है (हालांकि यह स्थानीय फ़ाइलों के लिए क्रोम में काम नहीं करता है, और यह आमतौर पर क्रॉस-मूल प्रतिबंध के अधीन होता है - प्रभावी रूप से , यह एचटीएमएल एम्बेडिंग के साथ "अजाक्स लाइट" जैसा है)। 'ExtText' को असाइनमेंट टेक्स्ट सामग्री पर पहुंचने के लिए यहां सबसे आवश्यक कोड है, बाकी इस बात पर निर्भर करता है कि हम इसके साथ क्या करना चाहते हैं। –