2012-08-14 18 views
20

मैं सिर्फ एचटीएमएल/जेएस का उपयोग कर विंडोज 8 विकास के साथ शुरू कर रहा हूं। मैंने वाहन के प्रमुख इकाइयों और टेलीविज़न को लक्षित करने वाले ऐप्स के लिए jQuery विकास में विसर्जित पिछले कुछ महीनों में बिताया है।jQuery के साथ विंडोज 8 मेट्रो ऐप का निर्माण

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

यही है, मैं अनिवार्य रूप से एक पृष्ठ ऐप बनाना चाहता हूं। मुख्य default.html फ़ाइल शीर्ष नेविगेशन/शीर्षक और एक अन्य div होगा। अन्य div का उपयोग अन्य सभी पृष्ठों, परियोजना के भीतर सभी अलग-अलग HTML फ़ाइलों में लोड करने के लिए किया जाएगा।

वैश्विक कार्यों और प्रमुख कार्यक्षमता सभी जावास्क्रिप्ट फ़ाइल, application.js में रहेंगे। फिर कोई भी पृष्ठ-विशिष्ट जावास्क्रिप्ट प्रत्येक HTML फ़ाइल के शीर्ष पर स्थित होगा।

मुझे जल्दी से यह महसूस हो रहा है कि यह एक समस्या है। मेरे पृष्ठों में लोड करने के लिए jQuery.load() का उपयोग करना मेरे ऐप में सुरक्षा त्रुटियों का कारण बनता है।

JavaScript runtime error: Unable to add dynamic content. A script attempted to inject dynamic content, or elements previously modified dynamically, that might be unsafe. For example, using the innerHTML property to add script or malformed HTML will generate this exception. Use the toStaticHTML method to filter dynamic content, or explicitly create elements and attributes with a method such as createElement.

मैं वास्तव में माइक्रोसॉफ्ट-विशिष्ट सामान का एक समूह सीखने से बचने की उम्मीद कर रहा था। मुझे लगता है कि यह बहुत अच्छा है कि उन्होंने बहुत सारे टूल प्रदान किए हैं और क्या नहीं, और शायद मैंने उन्हें पर्याप्त रूप से उपयोग नहीं किया है, लेकिन सब कुछ मेरे लिए बहुत कठोर लगता है और जो मैं करने की कोशिश कर रहा हूं या पहले से ही पूरा किया जा सकता है jQuery के साथ। मैं वह हूं जो वास्तव में जानना पसंद करता है कि क्या हो रहा है और इसका पूरा नियंत्रण है।

टेम्पलेट्स और नमूना परियोजनाओं को भी देखकर, मुझे वास्तव में सभी बार-बार कोड पसंद नहीं है। उदाहरण के लिए, सभी एकल HTML फ़ाइल सभी समान संदर्भों को घोषित करती हैं। मैं अपने संदर्भ बार और मेरे टाइटल बार जैसे अनुभागों को एक बार लिखना चाहता हूं, और मेरे पूरे प्रोजेक्ट में उस कोड को कॉपी/पेस्ट नहीं करना है।

क्या चीजों को जिस तरह से मैं उम्मीद कर रहा था, और एक पृष्ठ ऐप बनाने का कोई तरीका है? क्या उनके पास jQuery के .load() के लिए अपना स्वयं का विकल्प है?

सही दिशा में मुझे इंगित करने में कोई भी मदद की सराहना की जाएगी!

संपादित करें 2012/08/14:

मैं इस सवाल से ठीक उपयोग करने की कोशिश की है: Using jQuery with Windows 8 Metro JavaScript App causes security error

इस सुरक्षा चेतावनी से छुटकारा मिलता है और मैं jQuery.load का उपयोग कर HTML में लोड कर सकते हैं() । हालांकि, डोम एक्सप्लोरर को देखते हुए, मेरा एचटीएमएल मेरी लिपियों से अलग हो रहा है।

मैंने MSApp.execUnsafeLocalFunction() के अंदर अपना .load() कॉल लपेटने का भी प्रयास किया है, लेकिन फिर भी मेरी फ़ाइल अभी भी सभी स्क्रिप्टों से छीन ली गई है। क्या देता है?

+2

+1 संभवतः विंडोज 8 में "अनुमत" नहीं है, इस प्रश्न का उत्तर देखने के लिए प्रतीक्षा नहीं कर सकता! –

+0

संभावित डुप्लिकेट [विंडोज 8 मेट्रो जावास्क्रिप्ट ऐप के साथ jQuery का उपयोग सुरक्षा त्रुटि का कारण बनता है] (http://stackoverflow.com/questions/10859523/using-jquery-with-windows-8-metro-javascript-app-causes-security- त्रुटि), प्रश्न में एक उत्तर भी है जो मदद कर सकता है। – nfechner

+0

कोशिश की कि ठीक है। मुझे अब त्रुटियां नहीं मिल रही हैं, लेकिन मेरे पृष्ठों पर लिपियों को अभी भी निष्पादित नहीं किया गया है। – Danny

उत्तर

3

एक "औपचारिक" जिस तरह से आप क्या मांग कर रहे हैं करने के लिए नहीं है।
WinJS.Navigation "एकल पृष्ठ ऐप्स" का समर्थन करने के लिए प्रदान किया जाता है। उदाहरण के लिए, default.html एक मार्कअप कि प्रतिनिधित्व होगा शामिल जहां गतिशील लोड पृष्ठ की सामग्री जाना होगा:

<div id="contenthost" 
    data-win-control="Application.PageControlNavigator" 
    data-win-options="{home: '/pages/home/home.html'}"> 
</div> 

उदाहरण में ऊपर, वास्तविक सामग्री लोड किए गए पृष्ठ /pages/home/home.html

पर है ईवेंट हैंडलर्स में, आप बस load के लिए निम्न कर या अन्य पृष्ठ पर नेविगेट कर सकते हैं:

WinJS.Navigation.nav("/pages/other/page.html"); 

यह सच है, यह jQuery नहीं है, लेकिन यह काम करता है महान :)

JQuery लोड को अलर्ट करने के लिए
+0

मुझे लगता है कि यह मेरा एकमात्र मार्ग है। अब जब मैं इसका उपयोग कर रहा हूं, यह इतना बुरा नहीं है। – Danny

1

यदि आप किसी भी WinRT घटकों तक पहुंचने का इरादा नहीं रखते हैं, तो आप अपने पृष्ठ को एमएस-एपएक्स-वेब पर नेविगेट कर सकते हैं जो पृष्ठ के चारों ओर सुरक्षा नीति को बदल देगा, लेकिन आप इसे शुरू से निर्दिष्ट नहीं कर सकते अप। आपको नेविगेट करना होगा, और उस नए सेक्यूरिट संदर्भ का लाभ उठाना होगा।

अन्य विकल्प आप इसे msWWA.execUnsafeLocalFunction समारोह के साथ JQuery के लिए कॉल रैप करने के लिए है, जो सभी कि असुरक्षित कोड सक्षम हो जाएगा डोम

+0

मैं अपना jQuery .load() execUnsafeLocalFunction के भीतर और अभी भी कोई भाग्य नहीं है। डोम एक्सप्लोरर को देखते हुए, उस पृष्ठ पर मेरी स्क्रिप्ट छीन ली गई हैं। – Danny

+0

क्या आपने JQuery में कोड के माध्यम से कदम रखा था जहां यह स्क्रिप्ट सम्मिलित करता है? क्या होता है? –

7

मैं बस कि पैदा कर रहा था jQuery की लाइन को बदलने के द्वारा तय में धकेल दिया जा त्रुटि।

jQuery-1.8.0, लाइन 5566:

append: function() { 
     return this.domManip(arguments, true, function (elem) { 
      if (this.nodeType === 1 || this.nodeType === 11) { 
       self.appendChild(elem); // problem line 
      } 
     }); 
    }, 

को परिवर्तित:

append: function() { 
     return this.domManip(arguments, true, function (elem) { 
      if (this.nodeType === 1 || this.nodeType === 11) { 
       var self = this; 
       MSApp.execUnsafeLocalFunction(function() { 
        self.appendChild(elem); 
       }); 
      } 
     }); 
    }, 
+0

वैसे यह काम कर रहा था, और अब अचानक नहीं है। आह। – Danny

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