Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iFrame not loading on page load (jQuery Mobile)

I am having trouble getting an iFrame to display the first time that my jQuery mobile backed page loads.

I have an iFrame as follows:

<iframe id="manual" src="pdf/manual.pdf" style="width: 100%; height: 100%;"></iframe>

And for some reason, when the page loads, the iFrame fails to load with it. I can only see the PDF file if I REFRESH the page. Why is that?

Why is the PDF file not showing up in the iFrame in the first place without a page refresh?

Thanks everyone for any insight.

EDIT:

When I try to ope the page with safari, I get the following warning:

Resource interpreted as Document but transferred with MIME type application/pdf.

Could that have something to do with why the PDF doesn't load correctly?

like image 722
Brendan Lesniak Avatar asked May 17 '12 00:05

Brendan Lesniak


1 Answers

Since it is a ajax call, iframe has to be coded differently. Check this site, has some solutions... Site

slight modification to the code in the website to open a pdf.

Page1.html

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Demo Page</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
</head> 
<body> 
<div data-role="page">
    <div data-role="header">
        <h1>Demo Page</h1>
    </div><!-- /header -->
    <div data-role="content">   
        <!-- this is a regular page call-->
        <a href="page2.html" data-role="button">Another Page</a>
        <!-- the functionality for this page is defined in "javascript.js" -->
        <!-- we put it in a data attribute to avoid spiders spidering the link and hammering the device -->
        <a href="#" id="perform-function" data-role="button" data-link="FocusFree.pdf">Perform Function</a>
    </div><!-- /content -->
</div><!-- /page -->
</body>
</html>

Page2.html

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Another Page</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
</head> 
<body> 
<div data-role="page" data-add-back-btn="true">
    <div data-role="header">
        <h1>Another Page</h1>
    </div><!-- /header -->
    <div data-role="content">   
        <p>This is another page, dude.</p>
    </div><!-- /content -->
</div><!-- /page -->
</body>
</html>

main.js

$(document).ready(function(){

    $('#perform-function').bind('click', function(){
        // we're storing the link in an attribute
        // called 'data-link':
        var url = $(this).attr('data-link');        
        // create iframe if not there, comment display none to see it
        if ($('#temp-iframe').length === 0) {
            $('<iframe />').attr({
                id: 'temp-iframe',
                name: 'temp-iframe',
                height: '100%',
                width: '100%'
            }).css({                
                position: 'absolute',
                left: '50%',
                bottom: 0
            }).bind('load', function(){             
            }).appendTo('body');
        }
        // call the url into the iframe
        $('#temp-iframe').attr('src', url);
        // jquerymobile already does this because the link is just "#"
        // but if you end up 
        return false; 
    });

});
like image 117
srivenky Avatar answered Oct 18 '22 03:10

srivenky