在动态iframe中加载图片

时间:2014-05-01 16:51:45

标签: javascript jquery html iframe

我遇到了一个问题,即我动态创建iframe(因此没有URL),并在该帧上执行打印。我第一次点击打印(在ff中)它没有显示图像,因为它们没有被加载。是否有可能使用jQuery或vanilla JS强制打印等待iframe加载其中的所有图像?我的相关代码如下:

render: function (data, $el) {
    var index = $('a.myframe').index($el);
    $el.attr('data-print-frame', 'print-frame-' + index);
    this.populateTemplate(data, index);
    this.printData('print-frame-' + index, index);

    return this;
},
populateTemplate: function(data, index) {
    if(!$('iframe[name=print-frame-' + index + ']').length) {
        var iframehtml = '';
        var iframe = $('<iframe class="print-frame" name="print-frame-' + index + '" />');
        $('#content-area').append(iframe);
        var $stylesheets = $('*[rel=stylesheet]').clone();
        var inlineStyles = '';
        $stylesheets.each(function(i,e) {
            $stylesheets[i].href = $stylesheets[i].href;
            $stylesheets[i].href = $stylesheets[i].href.replace('debug=true', 'debug=false');
            $.ajax({
                url: $stylesheets[i].href,
                dataType: 'text',
                async: false,
                success: function(styledata) {
                    inlineStyles += styledata;
                }
            });
        });
        iframehtml = '<div class="print"><div id="wrapper">' + this.template(data) + '</div></div>';
        iframe[0].contentDocument.head.innerHTML = '<style type="text/css">' + inlineStyles + '</style>';
        iframe[0].contentDocument.body.innerHTML = iframehtml;
    }
},
printData: function(printId) {
    //this is the part that is not working
    $('iframe[name="' + printId + '"]').load(function() {
        window.frames[printId].focus();
        window.frames[printId].print();
    });
    //this is the part that is not working
}

因此,附加的HTML中包含我需要在第一次点击iframe时显示的图片。谢谢!

1 个答案:

答案 0 :(得分:0)

请尝试使用框架文档onready事件。

 printData: function(printId) {

        $(window.frames[printId].document).ready(function() {
            window.frames[printId].focus();
            window.frames[printId].print();
        });

    }