从 Iframe 调用父级中的 Fancybox,无需手动打开

Posted

技术标签:

【中文标题】从 Iframe 调用父级中的 Fancybox,无需手动打开【英文标题】:call Fancybox in parent from Iframe with no manual open 【发布时间】:2013-09-03 19:29:54 【问题描述】:

我想我可以在这里得到答案 -> call Fancybox in parent from iframe 并且演示页面确实显示了我想要的 (http://www.picssel.com/playground/jquery/fancyboxFromIframe_16Jan12.html) 但问题是我没有相同的脚本...

而不是(我猜这是手动打开):

$(".video").click(function() 
    $.fancybox(
        'padding'       : 0,
        // more options (v2.x) etc

我这样称呼图片:

$(document).ready(function() 
    $(".fancybox-thumbs").fancybox(
    padding: 0,
    // etc

我尝试像这样更改我的代码(基于答案和演示):

$(document).ready(function() 
    parent.$(".fancybox-thumbs").fancybox(
    padding: 0,
    // etc

...但它不起作用。有人可以告诉我应该如何更改 iframe 中的拇指、打开父页面上的图像、调整到屏幕大小的代码?

提前致谢!

【问题讨论】:

如果你 console.log( parent.$ ); 记录它存在还是未定义? Dave,抱歉,我不是 javascript 专家,请告诉我如何将它集成到整个代码中? @Dave Stein 如果您考虑过:$(document).ready(function() console.log(parent.$); $(".fancybox-thumbs").fancybox( padding: 0, ...它加载图片但不起作用,它以正常方式加载而不考虑父页面屏幕。 你需要下载firebug。谷歌那个。打开控制台。 console.log 会告诉你parent.$ 是否存在。我不是建议 console.log 然后仍然做$('#.fancybox-thumbs') 好的,谢谢 Dave...我笑了,我对 javascript 不太了解...我有 Firebug,但我不知道 consol.log 是什么意思。 【参考方案1】:

我找到了答案,不幸的是从来没有(!)从我自己在论坛上的问题...我与你分享,也许它对某人有帮助:

1 首先,我将 .css 和 .js 文件链接到父 html 和 iframe html。

2 我的父 html

<body>
<div id="more">
<div class="container">
        <div id="sensuality-div">
            <iframe id="sensuality-frame" src="http://www.igorlaszlo.com/sensuality.html"   style="overflow:hidden;height:100%;width:100%;" scrolling="no" allowTransparency="true" frameborder="0" sandbox="allow-same-origin allow-forms allow-scripts" ></iframe>
        </div>
    </div>
</div>
</body>

3 我的 iframe html

<body id="sensuality-body">

    <div class="view view-add"> 
        <img src="http://www.igorlaszlo.com/uploads/thumbs/41.jpg"  /> 
        <div class="mask">
            <a href="http://www.igorlaszlo.com/uploads/images/41.jpg" class="fancybox-thumbs" rel="group1"  title="34 Dance in the Dark"> 
                <h4>Dance in the Dark</h4> 
            <p>Model : Thierry Mercier</p> 
            <info>Click for zoom</info>
            </a> 
        </div> 
    </div>

    <div class="view view-add"> 
        <img src="http://www.igorlaszlo.com/uploads/thumbs/41.jpg"  /> 
        <div class="mask">
            <a href="http://www.igorlaszlo.com/uploads/images/41.jpg" class="fancybox-thumbs" rel="group1"  title="34 Dance in the Dark"> 
                <h4>Dance in the Dark</h4> 
            <p>Model : Thierry Mercier</p> 
            <info>Click for zoom</info>
            </a> 
        </div> 
    </div>

</body>        

4 我调用fancybox的原始代码(不是手动打开)如下(我在父页面和iframe页面上都有):

<script>
$(document).ready(function() 
    $(".fancybox-thumbs").fancybox(
    padding: 0,

    openEffect : 'elastic',
    openSpeed  : 150,

    closeEffect : 'elastic',
    closeSpeed  : 150,

    closeClick : true,

    prevEffect : 'elastic',
    nextEffect : 'elastic',

    closeBtn  : true,
    arrows    : true,
    nextClick : true,

    beforeShow: function () 
        this.title = $(this.element).attr('title');
        this.title = '<h3>' + this.title + '</h3>' + $(this.element).attr('alt') + '<br />';
    ,

            afterShow: function() 
    ,

            helpers : 
        title :  type: 'inside' 
    
    );
    );
</script>

5 黑客:我将找到的代码 (http://www.dynamicdrive.com/forums/archive/index.php/t-56981.html) 与我的代码结合起来,并在 iframe 页面中添加了一个附加脚本:

<script type="text/javascript">
jQuery(function($) 
    if(top !== window)
        var $$ = parent.jQuery;
        $$('#sensuality-div').html($('#sensuality-body').html()).find('a').fancybox(
            padding: 0,

        openEffect : 'elastic',
        openSpeed  : 150,

        closeEffect : 'elastic',
        closeSpeed  : 150,

        closeClick : true,

        prevEffect : 'elastic',
        nextEffect : 'elastic',

        closeBtn  : true,
        arrows    : true,
        nextClick : true,

        beforeShow: function () 
            this.title = $(this.element).attr('title');
            this.title = '<h3>' + this.title + '</h3>' + $(this.element).attr('alt') + '<br />';
        ,

        afterShow: function() 
        ,

        helpers : 
            title :  type: 'inside' 
        
        );
        $("#sensuality-body a").click(function(e)
            $$('#' + this.class).click();
        );
     
    else 
        $("#sensuality-body a").fancybox(
        padding: 0,

        openEffect : 'elastic',
        openSpeed  : 150,

        closeEffect : 'elastic',
        closeSpeed  : 150,

        closeClick : true,

        prevEffect : 'elastic',
        nextEffect : 'elastic',

        closeBtn  : true,
        arrows    : true,
        nextClick : true,

        beforeShow: function () 
            this.title = $(this.element).attr('title');
            this.title = '<h3>' + this.title + '</h3>' + $(this.element).attr('alt') + '<br />';
        ,

        afterShow: function() 
        ,

        helpers : 
            title :  type: 'inside' 
        
        );
    
);
</script>

也许你可以让它变得更容易,也许我添加了很多不必要的代码,我知道它工作正常......

我看到很多人都在寻找这类问题的解决方案,希望对你有所帮助!

很快你就能在www.igorlaszlo.com看到它

【讨论】:

您很快就能在 www.igorlaszlo.com 上看到它

以上是关于从 Iframe 调用父级中的 Fancybox,无需手动打开的主要内容,如果未能解决你的问题,请参考以下文章

在 Fancybox 中合并“从 iframe 在父级中打开”、“侧面标题”和“自定义标题”

将值/变量从 fancybox iframe 传递给父级

Fancybox iframe 内容 - 如何从父级访问 CSS?

Fancybox 图片库

Fancybox (jQuery) - 将信息从父级传递到 iframe 并将 iframe 传递回父级

在 iframe 父级中访问 div