2010-06-23 19 views
15

में काम नहीं कर मैं एक फेसबुक प्रशंसक पृष्ठ यहाँ बनाया है:jQuery/iframe क्रोम

http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044

यह iframes को शामिल किया गया कुछ पन्नों/छवि दीर्घाओं जो उपयोग jQuery कॉल करने के लिए। क्रोम को छोड़कर सभी ब्राउज़रों में सब कुछ ठीक काम करता है। आईफ्रेम से क्रोम में कुछ भी नहीं दिखता है, बस खाली सफेद पृष्ठभूमि।

मैंने ready हैंडलर के बजाय load ईवेंट का उपयोग करने की कोशिश की लेकिन अभी भी कोई भाग्य नहीं है।
क्या किसी ने क्रोम में इसी तरह की समस्या देखी है?

आपकी सहायता की बहुत सराहना की जाएगी।

शीर्षलेख में बड़ी छवियां iframe के माध्यम से आती हैं, एक पृष्ठ jquery शामिल है।

अद्यतन:

के रूप में नीचे टिप्पणी में दिखाया गया है, यह रूप में अच्छी तरह सफारी में भी काम करने के लिए प्रतीत नहीं होता।

अद्यतन 2

एक ही कोड जब iframe के बाहर चलाने के क्रोम में काम करने लगता है, यहाँ लिंक काम कर पेज के लिए है:

http://jsbin.com/esame4/4

अद्यतन 3:

ऐसा लगता है कि यह समस्या क्रोम में बनी रहती है जब iframes का उपयोग करते हुए यहां देखा जा सकता है:

http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=en
http://forums.sharethis.com/topic.php?id=2742

+1

यह भी –

+0

@ yaya3 सफारी के लिए मामला प्रतीत हो रहा है: यह सिर्फ है कि आप प्रदर्शित करना चाहते पेज के सिर के लिए एक चारसेट जोड़ने ठीक करने के लिए मेरे मामले में। – Sarfraz

+0

यह सफारी 5.0 में काम नहीं कर रहा है या तो –

उत्तर

1

कुछ सुझाव, ज्यादातर gallery.php पृष्ठ पर अपने जावास्क्रिप्ट सेटअप से संबंधित:

मेरी पहली वृत्ति यह (या यहां तक ​​कि एक इच्छित प्रतिक्रिया) एक बग है में कहने के लिए है जिस तरह क्रोम/वेबकिट क्रॉस-साइट स्क्रिप्टिंग और अन्य समान संभावित सुरक्षा छेद को संभालता है। मुझे पता है कि कुछ सुरक्षा छेद में आईफ्रेम के अंदर से स्क्रिप्ट चलाना शामिल है (this former Chrome bug को संदर्भित करता है)।

शायद यह आपके jquery.min.js को jjery.min.js से ajax.googleapis.com से संदर्भित करने के बजाय आपके गैलरी.एफ़.पी. पृष्ठ के समान डोमेन पर होस्ट करने के लिए कुछ करना है। अपने सर्वर पर jquery.min.js की एक प्रति डालने का प्रयास करें और उससे लिंक करें और देखें कि यह मदद करता है या नहीं।

इसके अलावा, अपने <head> टैग के अंदर अपनी jQuery लाइब्रेरी <link> टैग को स्थानांतरित करने का प्रयास करें, क्योंकि यह इसके लिए एक और उपयुक्त स्थान है।

आप अपने घूर्णन बैनर को चलाने के लिए jQuery Innerfade library का उपयोग करने का भी प्रयास कर सकते हैं। यह आपकी स्क्रिप्ट को साफ करेगा और, जो जानता है, शायद ब्राउज़र को यह समझाने के लिए कि आप सुरक्षा में एक छेद का फायदा उठाने की कोशिश नहीं कर रहे हैं।

यदि आप इनरफ़ेड का उपयोग करने के लिए स्विच करने में असमर्थ हैं, तो कम से कम अपने जावास्क्रिप्ट चर को $ $ के साथ नामित करने के लिए बदलें (उदा। "कर्कबॉक्स" में अपना "$ curbox" चर बदलें)। यह ब्राउज़र को आपके जावास्क्रिप्ट के साथ होने वाले किसी भी भ्रम को और स्पष्ट कर सकता है।कम से कम, यह अच्छा अभ्यास है, खासकर जब jQuery का उपयोग करते हैं।

+0

मैंने जो कुछ कहा है, मैंने कोशिश की है, लेकिन अभी भी कोई परिणाम नहीं है :( – Sarfraz

+0

आपको यकीन है? ऐसा लगता है कि आप अपने परिवर्तनीय नामों में $ का उपयोग कर रहे हैं। मुझे संदेह है कि इससे कोई फर्क पड़ता है, लेकिन यह वैसे भी अच्छा अभ्यास है। Http: // www.codelifter.com/main/tips/tip_020.shtml – JoshMock

+0

हाँ, मैंने jQuery के साथ $ को भी बदलने की कोशिश की थी लेकिन यह समस्या भी नहीं है। – Sarfraz

0

उस पृष्ठ में प्रतिक्रिया शीर्षलेखों की जांच करें जिन्हें आप iframe में डालने का प्रयास कर रहे हैं। आप x-frame-options नामक हेडर ढूंढ रहे हैं।

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

यह कुछ मूल्यवान जांच है।

+0

उन हेडर को 'हेडर ("x-frame-Options: SAMEORIGIN") के साथ सेट करने का प्रयास किया; लेकिन फिर भी समस्या बनी रहती है। – Sarfraz

+0

@ एसएसी - तो क्या पहले से ही एक _x-frame-options_ सेट किया गया था? यदि इसे सैमोरिजिन में बदलना है तो मदद मिलेगी, लेकिन केवल तभी जब आपका फ्रेम एक स्थानीय पृष्ठ है। अन्यथा कभी भी ध्यान न दें - यह केवल मामले में जांच के लायक था। – Keith

1

हे एसएसी, मैंने इसे क्रोम 5.0.375.86 पर आजमाया है और यह काम करता है। चूंकि सफारी और क्रोम एक ही वेब इंजन (वेबकिट) का उपयोग करते हैं, इसलिए यह एक ही समस्या का उत्तराधिकारी हो सकता है। चूंकि यह जावास्क्रिप्ट समस्या है, और अब क्रोम Google V8 जावास्क्रिप्ट इंजन का उपयोग करता है इसके बजाय जावास्क्रिप्टकोर (वेबकिट से डिफ़ॉल्ट जावास्क्रिप्ट इंजन), यह समस्या क्रोम के अंतिम संस्करणों में हल हो रही है। हो सकता है कि यह जावास्क्रिप्ट पर एक समस्या हो सकती है तैयार या लोड घटनाओं को प्रेषित न करें क्योंकि आईओआरएएम का निर्माण करने से पहले दस्तावेज़ पर डीओएम पहले ही लोड हो चुका है। यह सामग्री जांचने के लिए एक अस्थायी समाधान को ध्वज सेट किया जा सकता है। इस ध्वज को देखने के लिए setTimeOut के साथ पांच से दस सेकेंड टाइमर रखें। यदि यह प्रारंभ नहीं हुआ है, तो इसे setTimeOut कॉलबैक पर कॉल करें। तो अगर सफारी लोड या तैयार घटनाओं को कॉल नहीं करती है, तो setTimeOut यह आपके लिए कर सकता है। बेशक, इसे अपनी jquery परत के अंदर मत डालो। IFrame द्वारा लोड होने के लिए इसे अपने HTML के अंदर एक शुद्ध जावास्क्रिप्ट टैग के रूप में रखें।

2

यदि यह दस्तावेज़ के साथ कोई समस्या है। Iframe में पहले से नहीं बुलाया जा रहा है क्योंकि पृष्ठ उस बिंदु पर पहले ही लोड हो चुका है, तो इसके बजाय जावास्क्रिप्ट को इसके बजाय नए पृष्ठ के नीचे लोड करना चाहते हैं document.ready में, ताकि सबकुछ लोड हो जाने के बाद यह लोड हो जाए? मैं कुछ पन्नों पर कुछ इसी तरह किया है, की तरह पेज के शीर्ष पर जावास्क्रिप्ट का एक सा डाल एक चित्र लोड करने, और नीचे एक और हिस्सा इसे छिपाने के लिए, आदि को दिखाने के लिए ...

<html> 
    <head><script>function pop(){alert("Page Loaded");}</script></head> 
    <body>Lorum ipsum...</body> 
    <script>pop();</script> 
</html> 
4

समाधान वास्तव में सरल है। जब आप फेसबुक पेज/एप देखते हैं तो अपने आईफ्रेम सामान को Chrome में अच्छी तरह से प्रदर्शित करने के लिए, आपको किसी सुरक्षित सर्वर से सामग्री या गुणों को कॉल करना होगा।

आपको यह सुनिश्चित करना होगा कि आपकी सभी आवश्यक फाइलें और फ़ोल्डर्स जैसे सीएसएस, जेएस और छवि फाइलें एक सुरक्षित फ़ोल्डर के अंदर हों।

  1. इसके लिए आपको अपने डोमेन के लिए SSL प्रमाणपत्र की आवश्यकता है।

  2. अपने एचटीएसीएएस फ़ाइल और मोड को फिर से लिखने की स्थिति को सभी या विशिष्ट फ़ोल्डरों के लिए एसएसएल को मजबूर करने के लिए बदलें, खासकर जब आप फ़ाइलों को कॉल करने के लिए चर का उपयोग कर रहे हैं। यदि आप पूर्ण यूआरएल का उपयोग कर रहे हैं तो उन्हें https में बदलें।

आशा है कि इससे मदद मिलती है!

0

काम नहीं करने का कारण यह है कि ब्राउजर आईफ्रेम को असुरक्षित के रूप में चिह्नित करता है। हाँ, यह सच है, सफारी भी है कि तरह बर्ताव करता है:

<head><br/> 
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/> 
< /head><br/>