2009-05-29 29 views
47

में iFrame एम्बेडिंग का पता लगाएं मेरे पास एक ऐसा एप्लिकेशन है जिसमें एक निश्चित पृष्ठ है - चलो इसे कॉल करें पृष्ठ ए पृष्ठ ए कभी-कभी शीर्ष-स्तरीय पृष्ठ होता है, लेकिन कभी-कभी पेज बी के भीतर आईफ्रेम के रूप में एम्बेड किया जाता है। सभी पेज आते हैं एक ही सर्वर से और कोई क्रॉस-डोमेन समस्याएं नहीं हैं।जावास्क्रिप्ट

मेरे पास एक greasemonkey स्क्रिप्ट है जो पृष्ठ ए पर चलता है। Greasemonkey स्क्रिप्ट कैसे पता लगा सकता है कि पृष्ठ ए iframe संदर्भ में है या नहीं?

+0

क्या आप केवल मूल के लिए पैरेंट की तलाश करेंगे और देखें कि वे मौजूद हैं या नहीं? – 76mel

+0

संभावित डुप्लिकेट [कैसे पहचानें कि किसी वेबपृष्ठ को आईफ़्रेम के अंदर या सीधे ब्राउज़र विंडो में लोड किया जा रहा है?] (Http://stackoverflow.com/questions/326069/how-to-identify-if-a-webpage- है-लोड-इन-ए-इफ्रेम-या-सीधे-इन-टी) – feeela

उत्तर

111

सामान्य रूप से फ्रेम की लंबाई को देखते हुए यदि पृष्ठ ए के पास फ्रेम हैं (मुझे पता है कि यह इस विशिष्ट उदाहरण के लिए मामला नहीं हो सकता है)। अधिक विश्वसनीय और सार्थक परीक्षण होगा:

if (window!=window.top) { /* I'm in a frame! */ } 
+0

क्या आप समझा सकते हैं? क्या ऐसा इसलिए है क्योंकि एक माता-पिता बराबर हो सकता है? – Cheekysoft

+5

हां, ठीक है - .top और .parent उसी ऑब्जेक्ट को स्वयं के रूप में इंगित कर सकते हैं (और वास्तव में यह संभवतः खिड़की का परीक्षण करने के लिए स्पष्ट होगा। =! Window.top) – annakata

+0

यह मेरे लिए मेरे लिए काम नहीं करता फ़ायरफ़ॉक्स एक्सटेंशन, लेकिन मुझे एक अलग समाधान मिला: http://stackoverflow.com/questions/326069#7769187 – magnoz

11

विधेय

(window.parent.frames.length > 0) 

आपको बता देंगे तो आप सिर्फ क्या चाहते हैं।

+0

क्या एक अच्छी साइट है! उस – 76mel

+1

के लिए +1 इसे बाद में करना न भूलें; 0) –

+3

यह दृष्टिकोण आपको झूठी सकारात्मक देता है यदि आप इस चेक को चलाने वाले पृष्ठ पर किसी अन्य आइफ्रेम को घोंसला देते हैं। –

0

उपयोग window.frameElement और अगर यह रिक्त नहीं है और जांच करें कि अपनी nodename "IFRAME" है।

+1

का उपयोग करना होगा यह तत्व सफारी या ओपेरा में उपलब्ध नहीं है। इन दिनों आईपैड पर सर्फिंग करने वाले लोगों की संख्या को देखते हुए, यह शायद एक उपयुक्त समाधान नहीं है। – Ash

4

जैसा ऊपर बताया गया है स्वीकृत समाधान आईई 8 में काम नहीं करता है। इसके अतिरिक्त, window.parent.frames.length जांचना क्रॉस-डोमेन अपवाद का कारण बन सकता है।

इसके बजाय मैं var isInIFrame = top.location != self.location साथ इस लक्ष्य को हासिल करने में सक्षम था - यह IE8 में काम करता है और यह जब तक आप top.location की सामग्री पढ़ने की कोशिश न करें के रूप में एक क्रॉस-डोमेन उल्लंघन का कारण नहीं है।

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