Javascript和jQuery(Fancybox)问题

时间:2011-01-08 16:53:24

标签: javascript jquery fancybox

Javascript和jQuery(Fancybox)问题

我正在使用下面的Javascript函数进行Twitter共享(以及其他服务;功能代码简化为仅针对此问题的Twitter),它抓取要共享的页面URL和标题,并在与onclick的链接。这导致Twitter共享页面在弹出的浏览器窗口中加载,即<img src="/images/twitter_16.png" onclick="share.tw()" />

为了与网站的其他设计方面保持一致,我希望能够做的是不要在标准浏览器窗口中打开Twitter共享页面,而是在Fancybox(jQuery)窗口中打开。

当img或href链接在链接和标题中的文档就绪函数中包含类(在本例中为class="iframe")时,Fancybox可以在iFrame中加载外部页面。

现在,当然,当我将iframe类提供给也具有onclick share.tw()的链接时,我会得到两个弹出窗口:一个浏览器窗口弹出窗口,其中加载了正确的Twitter共享页面,以及一个Fancybox jQuery弹出窗口这显示了一个网站404。

如何更改功能以使用Fancybox呈现Twitter共享页面?这是接近它的正确方法吗?或者有更好的方法,比如在jQuery中实现共享功能吗?

...谢谢

Javascript分享功能:

var share = {
   tw:function(title,url) {
        this.share('http://twitter.com/home?status=##URL##+##TITLE##',title,url);
    },
    share:function(tpl,title,url) {
        if(!url) url = encodeURIComponent(window.location);
        if(!title) title = encodeURIComponent(document.title);

        tpl = tpl.replace("##URL##",url);
        tpl = tpl.replace("##TITLE##",title);

        window.open(tpl,"sharewindow"+tpl.substr(6,15),"width=640,height=480");
    }
};

它被调用,即: <img src="/images/twitter_16.png" onclick="share.tw()" />

Fancybox功能,通过在img或href链接中添加class="iframe"来调用

$(".iframe").fancybox({
'width' : '100%',
'height' : '100%',
'autoScale' : false,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe'
});

6 个答案:

答案 0 :(得分:7)

无论您如何更改设计,在Twitter上使用iframe都无法正常工作。

如果您将网址http://twitter.com替换为其他内容,例如http://www.godaddy.com,则可以使用。我尝试过类似下面的内容:

$('h1').click(function(e) {
  $.fancybox({
    href : 'http://www.godaddy.com', // http://twitter.com will not work here
    title : 'twitter window',
    width : 640,
    height : 480,
    type : 'iframe'
  });
});

这是因为出于安全原因,Twitter使用javascript故意“打破”iframe。

因此,如果使用Twitter.com,以这种方式显示FancyBox iframe的想法是行不通的。这里有一些确认和一些想法:(例如使用来自iframe的API调用) - http://groups.google.com/group/twitter-development-talk/browse_thread/thread/b1bca9ef074086c7

对于你的“其他服务”,希望没有相同的限制(我怀疑其中一些可能),那么另一个answer further down the page from wajiw似乎是一个很好的赞美。

答案 1 :(得分:3)

我的方法是删除fancybox初始化并直接从你的共享函数触发它:

var share = {
   tw:function(title,url) {
        this.share('http://twitter.com/home?status=##URL##+##TITLE##',title,url);
    },
    share:function(tpl,title,url) {
        if(!url) url = encodeURIComponent(window.location);
        if(!title) title = encodeURIComponent(document.title);

        tpl = tpl.replace("##URL##",url);
        tpl = tpl.replace("##TITLE##",title);


        $.fancybox({
                        'href' : tpl,
                        'title' : title,
                        'width' : '100%',
                        'height' : '100%',
                        'autoScale' : false,
                        'transitionIn' : 'none',
                        'transitionOut' : 'none',
                        'type' : 'iframe'
                        });

        return false;
    }
};

我不确定我的语法是否正确,但类似的东西应该适合你。

另一种不同的尝试可能是使用虚拟锚,改变它的属性,并触发点击它:

jQuery(document).ready(function() {

        $("#dummyLink").fancybox({
                        'width' : '100%',
                        'height' : '100%',
                        'autoScale' : false,
                        'transitionIn' : 'none',
                        'transitionOut' : 'none',
                        'type' : 'iframe'
                        });

        return false;
    }
  };
});
var share = {
   tw:function(title,url) {
        this.share('http://twitter.com/home?status=##URL##+##TITLE##',title,url);
    },
    share:function(tpl,title,url) {
        if(!url) url = encodeURIComponent(window.location);
        if(!title) title = encodeURIComponent(document.title);

        tpl = tpl.replace("##URL##",url);
        tpl = tpl.replace("##TITLE##",title);

        $("#dummyLink").attr('href', tpl);
        $("#dummyLink").attr('title', title);
        $("#dummyLink").trigger('click');
        return false;
    }
};

HTML:

 <a href="#" title="" id="dummyLink" style="display:none;"></a>

答案 2 :(得分:0)

我看到的是window.open函数,负责打开新的浏览器窗口。这应该去。相反,你应该设置像这样转到iframe的链接的href,然后调用fancybox函数。

我用过fancybox已经有一段时间了,我更喜欢使用jquery-ui.dialog,所以我错了..

答案 3 :(得分:0)

我使用jQuery Colorbox插件遇到了同样的问题。我试图在Twitter上分享并在Facebook上分享将在模式框中打开的链接。当您打开链接时,会出现模态框,但iFrame将为空白,只显示一个白色框。

不幸的是,这是预期的行为。 Twitter共享页面和Facebook共享页面都有指示在链接被跟踪时突破框架,从而显示您正在看到的空白框。由于各个站点提供的内容不在您的控制范围内,因此无法阻止此操作。

答案 4 :(得分:0)

正如其他人所说,推特不可能 如果你查看Twitter主页的来源,你会在body标签下方看到一个像这样的小脚本。

<script>
    if (window.top !== window.self) {
        document.write = "";
        window.top.location = window.self.location;
        setTimeout(function() {
            document.body.innerHTML = ""
        }, 1);
        window.self.onload = function() {
            document.body.innerHTML = ""
        }
    };
</script>

这意味着如果您在iframe(自我!=顶部),请拉出空白页 没有可行的解决方法。

答案 5 :(得分:0)

也许看看http://platform.twitter.com/widgets.js,看看Twitter如何创建弹出窗口,然后弄清楚你是否可以坚持使用小部件。