2012-03-02 15 views
8

मेरे पास मेरे पृष्ठ में iframe है। यदि iframe लोड नहीं करता है, यह alert संदेश "पीडीएफ नहीं मिला" और अगर iframe लोड करता है, यह होना चाहिए alert "पीडीएफ खोला" करना चाहते हैं।अगर फ़्रेम लोड या लोड नहीं होता है तो फ़ंक्शन को कॉल करना चाहते हैं?

क्या कोई यह जानता है कि इसे कैसे प्राप्त किया जाए?

+0

क्या आप आईफ़्रेम में पीडीएफ फाइल लोड कर रहे हैं? –

+0

@ ŠimeVidas हां। मुझे यह पसंद है अगर पीडीएफ सर्वर से लोड नहीं किया जा सकता है एक संदेश बॉक्स "अलर्ट" आना चाहिए –

+0

क्या वेब पेज के समान डोमेन पर पीडीएफ है? –

उत्तर

9

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

बेशक, अजाक्स-अनुरोध उसी मूल नीति द्वारा प्रतिबंधित हैं (जब तक कि वेब-सर्वर सीओआरएस सक्षम नहीं करता), लेकिन आपने कहा कि पीडीएफ एक ही डोमेन पर है, इसलिए कोई समस्या नहीं होनी चाहिए।

इसके अलावा, आपने कहा है कि आप Mootools लाइब्रेरी का उपयोग करते हैं - मैं jQuery का उपयोग करता हूं, इसलिए मैं केवल आपको एक jQuery समाधान प्रदान कर सकता हूं, लेकिन चूंकि हम "सफलता" और "त्रुटि" हैंडलर के साथ एक साधारण अजाक्स-अनुरोध कर रहे हैं , आप आसानी से मेरे jQuery समाधान के आधार पर एक Mootools समाधान फिर से बनाने में सक्षम होना चाहिए।

तो, एक iframe और एक दिया गया URL:

var iframe = $('#iframe')[0]; // reference to IFRAME element 
var url = 'files/document1.pdf'; 

अजाक्स अनुरोध:

$.get(url, function() { 
    iframe.onload = function() { alert('PDF opened!'); }; 
    iframe.src = url; 
}).error(function() { alert('PDF not found'); }); 

सफलता-प्रदर्शन:http://jsfiddle.net/CZWdL/1/show/
त्रुटि-प्रदर्शन:http://jsfiddle.net/CZWdL/2/show/

तो, अगर टी वह अजाक्स-अनुरोध एक "त्रुटि" घटना ट्रिगर करता है, हम तुरंत "नहीं मिला" संदेश को तुरंत सतर्क करते हैं। यदि, हालांकि, अजाक्स-अनुरोध एक "सफलता" घटना को ट्रिगर करता है, तो हम अपने IFRAME तत्व को "लोड" हैंडलर असाइन करते हैं (यह "लोड" हैंडलर अंततः "लोड" संदेश को सतर्क करेगा), और यूआरएल को src संपत्ति पर सेट करेगा मैन्युअल रूप से।

+1

यह कोई भी काम नहीं करेगा। JQuery त्रुटि कॉलबैक स्थिति कोड का पता लगाता है। ऐसे मामले हैं जहां सर्वर एक्स-फ्रेम-विकल्प के साथ 200 स्थिति देता है: सैमोरिजिन। google.com यह करता है। –

+0

मेरा मतलब है कि यह आम तौर पर काम नहीं करेगा। लेकिन ओपी के मामले के लिए, यानी iframe में पीडीएफ लोड करने के लिए, यह काम करना चाहिए। –

+0

प्रतीक्षा करें, JQuery और iFrame दोनों यूआरएल ला रहे हैं? क्या वह थोड़ा भारी नहीं है? –

-2

आप बस अपनी iframe में इस कोड को जोड़ सकते हैं, जब यह भरा हुआ है:

<script type="text/javascript"> 
<!-- 
     window.top.window.callback(); 
//--> 
</script> 

और अपने शीर्ष पेज में:

<script type="text/javascript"> 
<!-- 
     function callback() { 
       alert("File loaded!"); 
     } 
//--> 
</script> 

अपने कॉलबैक समारोह 30 सेकंड के बाद कहा जाता है नहीं है, तो आप कर सकते हैं कहें कि आपका पीडीएफ लोड नहीं हुआ है।


संपादित करें: आपका पहला (आइफ्रेम) के साथ फ़ाइल:

<html> 
    <head> 
     <script type="text/javascript"> 
     <!-- 
      function callback() { 
       alert("This file doesn't exist"); 
      } 
     //--> 
     </script> 
    </head> 
    <body> 
     <iframe src="load_pdf.php?f=test.pdf" style="width:900px;height:500px;"></iframe> 
    </body> 
</html> 

दूसरा (php फ़ाइल):

<?php 
$file = $_GET['f']; 

if(is_file($file)) { 
    header('Content-type: application/pdf'); 
    readfile($file); 
} 
else { 
    // This file doesn't exist 
    echo ' 
     <script type="text/javascript"> 
     <!-- 
       window.top.window.callback(); 
     //--> 
     </script> 
    '; 
} 
?> 

मत भूलना $ _GET [सुरक्षित करने के लिए 'एफ']

+0

क्या आप कृपया उदाहरण –

+1

में कुछ उदाहरण अपलोड कर सकते हैं मुझे नहीं लगता कि यह समाधान इस विशेष परिदृश्य के लिए काम करेगा क्योंकि आईफ़्रेम के अंदर वाला पृष्ठ HTML नहीं है, यह एक पीडीएफ दस्तावेज़ है। – Fenton

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