2009-07-24 24 views

उत्तर

16

हालांकि यह संभव नहीं है।

<iframe src="mypage?iframe=yes"></iframe> 

और उसके बाद जाँच serverside यदि क्वेरी स्ट्रिंग आइफ्रेम शामिल = हाँ या ब्राउज़र द्वारा भेज Referer हेडर के साथ।

+2

धन्यवाद, लेकिन यह मेरी समस्या का समाधान नहीं करता है क्योंकि मैं चाहता हूं कि पेज केवल तभी पहुंचा जा सके जब किसी आईफ्रेम (कुछ सुरक्षा कारणों से) में। क्वेरीस्ट्रिंग में कुछ जोड़ना सुरक्षित होने के लिए करना बहुत आसान है। – pistacchio

+13

यदि यह सुरक्षा कारणों से है, तो आप कुछ गलत कर रहे हैं। सबसे अच्छा, एकमात्र चीज जो आपको आईफ्रेम में होने के लिए संकेत दे सकती है वह एक रेफरर है। और यहां तक ​​कि वह फोर्ज करने योग्य है। सुरक्षा जांच और सत्यापन द्वारा किया जाता है, धारणाओं के नाजुक जाल से नहीं। – Yuliy

3

यह जांचने का कोई तरीका नहीं है कि @ डब्ल्यूटीपी के उत्तर पर आपकी टिप्पणी में बताए गए "सुरक्षित" की आपकी आवश्यकता के अनुरूप होगा।

1

मुझे नहीं लगता कि सर्वर-पक्ष ऐसा कर सकता है, तो अपने पृष्ठ में एक छिपी हुई नियंत्रण क्यों न डालें जो आईफ्रेम में होगा? जब आईफ्रेम लोड में यूआरएल होता है, तो आप छिपे हुए इनपुट को सेट करने के लिए कुछ क्लाइंट-साइड कोड जोड़ सकते हैं ताकि यह इंगित किया जा सके कि आप आईफ्रेम में हैं। सबसे आसान जांच एक ऑनलोड विधि में क्लाइंट-साइड पर हो सकता है, इस तरह:

// Set hidden input 
someHiddenInput.value = self != top 

यह क्वेरी स्ट्रिंग तुलना में अधिक सुरक्षित है, लेकिन यह अभी भी आप के लिए पर्याप्त सुरक्षा नहीं हो सकता है।

मेरा 2 सेंट।

6

प्रपत्र के अंदर निम्नलिखित कोड का उपयोग करें:

<asp:HiddenField ID="hfIsInIframe" runat="server" /> 
<script type="text/javascript"> 
    var isInIFrame = (self != top); 
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame); 
</script> 

तो आप आसानी से देख सकते हैं कि उस में कोड-पीछे एक iFrame है:

bool bIsInIFrame = (hfIsInIframe.Value == "true"); 

परीक्षण किया गया है और मेरे लिए काम किया।

संपादित करें: कृपया ध्यान दें कि आपको ऊपर दिए गए कोड को चलाने के लिए jQuery की आवश्यकता है। इसे चलाने के लिए बिना jQuery सिर्फ निम्नलिखित (untested) कोड जैसे कुछ कोड का उपयोग छिपी हुई फ़ील्ड का मान सेट करने के लिए:

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame; 

संपादित करें 2: यह केवल काम करता है जब पेज एक बार लोड किया गया था। अगर किसी को यह सुधारने का विचार है, तो मुझे बताएं। मेरे मामले में मैं सौभाग्य से केवल एक पोस्टबैक के बाद मूल्य की जरूरत है।

+1

यह जवाब होना चाहिए। –

+2

नहीं @RoyiNamir, यह सर्वरसाइड समाधान नहीं है;) – tetri

+1

@tetri, इस कोड के साथ यदि आप iframe में हैं तो आप सर्वरसाइड से जांचने में सक्षम हैं। मैं मानता हूं कि कुछ क्लाइंट-कोड हैं - लेकिन मेरी राय में यह सबसे अच्छा समाधान है क्योंकि यह परवाह नहीं करता कि पृष्ठ को कैसे कॉल किया जाता है। वर्तमान स्वीकृत उत्तर के लिए प्रत्येक आईफ्रेम में अनुरोध मान सेट करने की आवश्यकता होती है - और यह भुला दिया जा सकता है। – Undercover1989

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