दिलचस्प पोस्ट
कोणीय: केवल एक संख्या में पाठ बॉक्स में टाइप करने की अनुमति देता है प्रोग्रामेटिक रूप से बदलते टेक्स्टबॉक्स मान द्वारा जावास्क्रिप्ट ऑन-अप ईवेंट को कॉल करें आप मूल्य से एक शब्दकोश कैसे सॉर्ट करते हैं? जीआईटी ने अस्थिर फाइलों के चेकआउट को पूर्ववत कर सकते हैं जावा और एंड्रॉइड डेवलपमेंट में वीक रेफरेंस का उपयोग कैसे करें? एक्सचेंज साइट्स के समान एक्सएक्स जैसे "4 मिनट पहले" के समय का प्रारूप कैसे करें छिपे हुए माता-पिता div में बाल अवकाश दिखाएं एररगैग हमेशा Laravel 5.2 में खाली है PowerMock का उपयोग करने के लिए परीक्षण के लिए निजी विधि को कैसे नकल करें? मैं विस्तारित PHP वर्ग में एक स्थिर कॉल से क्लासनाम कैसे प्राप्त करूं? बुरा क्यों असाइन कर रहे हैं? मैं सी # में किसी प्रक्रिया के मालिक को कैसे निर्धारित करूं? जावास्क्रिप्ट मल्टीथ्रेड है? Arrayadapter के साथ फ़िल्टर सूची दृश्य सी के रैंड () के लिए कौन सी आम एल्गोरिदम का उपयोग किया जाता है?

वेब सर्वर के बिना जावास्क्रिप्ट के साथ स्थानीय फाइलों को लोड करना

मुझे HTML5 और कैनवास का उपयोग करने वाला सॉफ़्टवेयर लिखना होगा।

संपूर्ण सॉफ़्टवेयर किसी सर्वर की आवश्यकता के बिना, स्थानीय स्तर पर चलने में सक्षम होना चाहिए। इसलिए मैं केवल जावास्क्रिप्ट, कोई php का उपयोग करने में सक्षम हूं।

मुश्किल भाग: मुझे पाठ-फाइलों की सामग्री को गतिशील रूप से प्राप्त करना होगा जो ऑपरेशन के दौरान आवश्यक हैं।

उदाहरण के लिए: जब सॉफ्टवेयर शुरू होता है, मुझे "config.json" की आवश्यकता होती है। और उपयोगकर्ता ने कुछ desicions के बाद, मुझे "story1.txt" या "story2.txt" और इतने पर की आवश्यकता है।

मेरी समस्या:

मैं अजाक्स का उपयोग नहीं कर सकता, क्योंकि क्रोम उसे रोकता है – स्थानीय फाइलों को अन्य फाइलों की सामग्री लाने की अनुमति नहीं है। मुझे हमेशा त्रुटि मिलती है- संदेश

मैंने अब तक क्या कोशिश की है:

  • Ajax और jQuery के साथ लोड फ़ाइलें

    क्रोम मुझे फाइल लोड करने की अनुमति नहीं देता

  • स्क्रिप्ट टैग में लोड फ़ाइल

    यहां तक ​​कि अगर मैं js-code के रूप में json-file घोषित करता हूं, तो मैं लोड की गई सामग्री की सामग्री तक नहीं पहुंच सकता

  • फ़ाइल को अदृश्य इफ्रेम में लोड करें, और इसकी सामग्री पढ़ें

    काम करता है लोड हो रहा है, और मैं कोड देख सकता हूँ लेकिन जब मैं आइफ्रेम की सामग्री का उपयोग करने की कोशिश करता हूं, तो मुझे क्रोम त्रुटि संदेश मिलता है:

    "Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match." 

सवाल:

क्या एक टेक्स्टफ़ाइल को गतिशील रूप से लोड करने का कोई तरीका है, या क्या मुझे एक वेबर्सवर्क का उपयोग करने के लिए मजबूर किया जा रहा है?

वेब के समाधान से एकत्रित समाधान "वेब सर्वर के बिना जावास्क्रिप्ट के साथ स्थानीय फाइलों को लोड करना"

अगर आप क्रोम का उपयोग करने पर जोर देते हैं, तो इसके पास स्थानीय कमांड लाइनों (/ --allow-file-access-from-files / --disable-web-security ) तक पहुंच की अनुमति देने के लिए कुछ कमांड लाइन झंडे हैं। ध्यान दें कि आपको पूरे ब्राउज़र को उन झंडे से खरोंच से चलाने की आवश्यकता है – यानी पहले से कोई भी अन्य क्रोम विंडो खोलें झंडे कोई प्रभाव नहीं पड़ेगा और यह प्रभाव सभी विंडो में बनी रहती है जब तक कि क्रोम बंद नहीं हो जाता है, जो कि जाहिर है कि भारी छेद सुरक्षा।

यदि आप अपने "एप्लिकेशन" को किसी प्रकार की स्वचालित सेटअप स्क्रिप्ट के साथ पैक करते हैं, तो आप हल्के स्थानीय सर्वर सेट अप कर सकते हैं। यह अभी भी बहुत अच्छा नहीं है, क्योंकि आपको निष्पादन योग्य स्थापित करने की आवश्यकता होती है कि उपयोगकर्ता को प्रतिबंधों के कारण स्थापित करने में पूरी तरह से अक्षम नहीं होना चाहिए या नहीं।

आप क्रोम एक्सटेंशन के रूप में अपने एचटीएमएल / जेएस-आधारित ऐप को पैक कर सकते हैं – एक्सटेंशन में रैंडम कोड की तुलना में बहुत अधिक अनुमतियां हैं, लेकिन फिर आपको इसे Google Play के माध्यम से वितरित करने या अपने उपयोगकर्ताओं के लिए मैन्युअल रूप से इंस्टॉल करने के निर्देश प्रदान करने की आवश्यकता होगी।

और अंत में, आप सभी डेटा को प्रारूपित कर सकते हैं, जिसमें आपके कॉन्फ़िगरेशन और पाठ फ़ाइलों को आपके मान्य जावास्क्रिप्ट कोड के रूप में उल्लिखित किया गया है – यानी story1.txt को story1.js को पैक करें जैसे:

 var myapp.story1 = "Complete text of story1.txt" 

और फिर बस गतिशील रूप से आपसे संबंधित वार्स से आवश्यक सामान का चयन करें या यहां तक ​​कि DOM manipulation का उपयोग केवल गतिशील रूप से जोड़कर <script> tags के माध्यम से आपको आवश्यक स्क्रिप्ट लोड करें। मेरी राय में यह सबसे अच्छा विकल्प होगा क्योंकि यह कम दखल है: इसमें किसी भी स्थापना / पुनरविन्यास की आवश्यकता नहीं है, यह सिर्फ आउट-ऑफ-बॉक्स का काम करता है।

आपको अपने स्थानीय फाइलों को उसी सर्वर पर रखना होगा यदि आप स्थानीय सर्वर पर चल रहे हैं तो आपको अपने "दूरस्थ" स्थान तक पहुंच प्राप्त करने के लिए अपाचे के रूप में कुछ वेबसर्वर इंस्टॉल करना होगा

हर आधुनिक ब्राउज़र यह रोकता है, क्योंकि आपको किसी भी उपयोगकर्ता से स्थानीय फाइलों को नहीं पढ़ना चाहिए। यहां तक ​​कि अगर आप स्थानीय होस्ट से चल रहे हैं

मैंने पाया है कि फ़ायरफ़ॉक्स एचटीएमएल और जेएस स्थानीय स्तर पर चलेंगे।

यदि आपको अपने ब्राउज़र में सोचने के लिए कि यह स्थानीय फ़ाइल सिस्टम से नहीं खींच रहा है, तो बस एक त्वरित और आसान "कानूनी" वेब सर्वर की आवश्यकता है, बस अजगर के सरल एचटीपीपी सर्वर का उपयोग करें यह केवल उन अनुरोधों से अनुरोध करता है जो उस निर्देशिका से अनुरोध किया जाता है जो इसे लागू किया गया था। सर्वर अन्यथा गूंगा है। यह PHP स्क्रिप्ट या कुछ भी निष्पादित नहीं करेगा। ऐसे:

  1. अपने विकास मशीन पर अजगर 2.7 को स्थापित करें। यह केवल एक चीज है जो यह फ़िक्स स्थायी रूप से इंस्टॉल करेगा।
  2. अपनी कमांड लाइन / टर्मिनल विंडो खोलें
  3. उस निर्देशिका पर स्विच करें जहां आपकी स्क्रिप्ट्स रहते हैं।

सीडी / यूजर / कोडमैकी / मैकन्यू ऐप (जैसे मैक पर)

  1. निम्न चलाएं:

    अजगर-एम सरल एचटीटीपीएस 80

मैक या लिनक्स बॉक्स पर, आपको सुडो का उपयोग करना पड़ सकता है:

sudo python -m SimpleHTTpserver 80

  1. अपना ब्राउज़र खोलें और इसमें टाइप करें:

http: //localhost/myapp.html (अपनी स्क्रिप्ट के नाम के साथ "myapp.html" विकल्प)

  1. और लोग आनन्द करते हैं
  2. वेब सर्वर को रोकने के लिए, टर्मिनल विंडो पर वापस चलें जिसमें यह चल रहा है और Ctrl-C दबाएं या कंप्यूटर को नीचे बंद करें हर बार जब आप इसे चलाने के लिए चाहते हैं तो इस सर्वर को चरण 4 का उपयोग करके पुनः आरंभ करने की आवश्यकता होगी।

आप वास्तव में फैंसी प्राप्त कर सकते हैं और विभिन्न बंदरगाहों पर कई उदाहरण चला सकते हैं, लेकिन यह इस त्वरित सुधार के दायरे से परे है।

आप जो वर्णन कर रहे हैं (और प्रस्तावित समाधान) ब्राउज़र की सुरक्षा को गंभीरता से कम कर देता है

एक सर्वर की आवश्यकता के बिना, स्थानीय रूप से चलाने में सक्षम होना चाहिए

तो सॉफ्टवेयर मशीन पर कैसे मिलता है? जब तक आप पोस्ट में डीडीएस भेजना नहीं चाहते हैं, सॉफ्टवेयर की तैनाती मैनिफ़ेस्ट आधारित कैशिंग (क्रोम, एमएसआईई और फ़ायरफ़ॉक्स समेत सभी आधुनिक ब्राउज़रों में समर्थित) का उपयोग कर एक एचटीएमई 5 ऐप्लिकेशन के रूप में हो सकती है। यह सामान्य फ़ाइलों के रूप में डेटा को संसाधित करने के लिए क्या नहीं करता है – लेकिन आप स्थानीय संग्रहण में डेटा रख सकते हैं।

आप AJAX का उपयोग किए बिना स्थानीय रूप से स्थानीय ब्राउज़र Chrome ब्राउज़र में लोड कर सकते हैं। आप क्रोम ब्राउज़र में फ़ाइल को लोड करने के लिए आमतौर पर $ $ .getJSON () जैसे jQuery फ़ंक्शन का उपयोग कर सकते हैं।

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

यहां आपके लिए क्रोमियम फ्लैग सेट करने के कुछ चरण हैं जो आपको कुछ अतिरिक्त सुविधाएं प्रदान करता है जो आपको अपने स्थानीय सिस्टम से डेटा फ़ाइल तक पहुंचने में सहायता करता है। य़े हैं:-

  1. क्रोम के किसी चलने वाले इंस्टेंस के बाहर निकलें या बंद करें
  2. क्रोम को लॉन्च करने के लिए सामान्य रूप से शॉर्टकट खोजें
  3. इसकी एक प्रति बनाएँ
  4. नए शॉर्टकट पर राइट क्लिक करें, और गुण चुनें।
  5. लक्ष्य के बहुत ही अंत में: पाठ बॉक्स, एक स्थान जोड़ें और फिर वांछित कमांड लाइन झंडे यह कुछ ऐसा होना चाहिए: "सी: \ प्रोग्राम फ़ाइलें (x86) \ Google \ क्रोम एप्लिकेशन \ क्रोम.एक्सए" – -फाइल-पहुँच-से-फ़ाइलें – अक्षम-वेब-सुरक्षा
  6. "लागू करें" बटन पर क्लिक करें और फिर "ठीक" क्लिक करें।
  7. नए कमांड लाइन झंडे के साथ क्रोम लॉन्च करने के लिए नया शॉर्टकट डबल क्लिक करें।

नोट: अब केवल इस क्रोम आइकन के लिए सेट किए गए आपके ध्वज को याद रखें इसलिए इस क्रोम आइकन के साथ अपना आवेदन प्रारंभ करें

अपनी आवश्यकताओं के आधार पर, फ़ेच का उपयोग ( https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API ) एक विकल्प है:

  fetch("./config.json").then(function(res) { // res instanceof Response == true. if (res.ok) { res.json().then(function(data) { console.log(data); }); } else { console.log("Looks like the response wasn't perfect, got status", res.status); } }, function(e) { console.log("Fetch failed!", e); }); 

यदि आपकी आवश्यकताओं की अनुमति है तो मैं एक क्रोम एक्सटेंशन बनाऊंगा। वे बनाना आसान है और आपके लिए काफी अच्छी तरह से काम कर सकते हैं। http://developer.chrome.com/extensions/index.html