1

我的网站的社交媒体插件有问题,问题出在 Twitter 和 Facebook。Google+ 完美运行。

我正在尝试让插件与我在 jQuery 中的弹出脚本一起工作。当他们单击链接时,弹出窗口将添加到正文标签的末尾。在函数中我放了Facebook、Twitter和Google+的JS代码,并让div的位置在正确的位置。不是问题是当我第一次单击弹出窗口时(重新加载页面后)所有插件都工作正常。当我关闭弹出窗口并重新打开它时。只有 Google+(或带有 iFrame 的 Facebook)正在显示...

每次打开弹出窗口时,我都会调用这部分社交媒体插件!

                // Google Code
                (function() {
                    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
                    po.src = 'https://apis.google.com/js/plusone.js';
                    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
                })();
                // Twitter Code
                !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");

                if(options.socialLink != false){
                    var FBsocialLink = 'href='+options.socialLink;
                    var socialLink = 'data-href="'+options.socialLink+'"';
                }
                //show FB
                $('.popup_container').append('<iframe src="//www.facebook.com/plugins/like.php?'+FBsocialLink+'&amp;send=false&amp;layout=button_count&amp;width=125&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:125px; height:21px;" allowTransparency="true"></iframe>');
                //show Google+
                $('.popup_container').append('<div class="g-plusone" data-size="medium" '+socialLink+'></div>');
                //show Twitter
                $('.popup_container').append('<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.rednasdesign.nl">Tweet</a>');

有解决办法吗?

4

2 回答 2

0

问题出在异步加载的javascript代码中。它可能会在弹出窗口之外创建一个脚本标签。在第二次调用时,它检查这个标签是否已经存在并且什么都不做。寻找if(!d.getElementById(id))零件。

但是,在您的情况下,异步加载器无论如何都没有意义,因为在用户打开弹出窗口时页面已经完全加载。

因此,您可以直接包含外部脚本。当弹出窗口再次显示时,完整的内容将被清除,包括那些脚本标签。

var socialLink = e.attr("data-link");
var message = e.attr("data-title");
var hashtag = e.attr("data-hashtag");

var html = ''
    + '<div class="socialbutton"><iframe src="https://www.facebook.com/plugins/like.php?href='+socialLink+'&amp;send=false&amp;layout=button_count&amp;width=125&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:125px; height:21px;" allowTransparency="true">Loading Facebook</iframe></div>'
    + '<div class="socialbutton"><div class="g-plusone" data-size="medium" data-href="'+socialLink+'">Loading Google+</div></div>'
    + '<div class="socialbutton"><a href="https://twitter.com/share" class="twitter-share-button" data-url="' + socialLink + '" data-text="' + message + '" data-hashtags="' + hashtag + '">Loading Twitter</a></div>'

    + '<div><a href="https://stendhalgame.org/wiki/Two_clicks_for_more_privacy" target="_blank">Two clicks for more privacy.</a></div>'

    + '<script async type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>'
    + '<script async type="text/javascript" src="https://platform.twitter.com/widgets.js" id="twitter-wjs"></script>';

$('#popupContent').html(html);

在打开弹出窗口和完全加载按钮之间会有一点延迟,尤其是在 Internet 连接速度较慢的情况下。为了防止更快的按钮跳来跳去,我把它们放到了 div.elements 中,因为我在 CSS 中定义了 24px 的固定高度。

于 2012-02-19T15:20:58.787 回答
0

由于每次弹出窗口打开时都会插入插件代码,因此请务必调用jQuery("#MyDiv").dialog("destroy");. 有关详细信息,请参阅http://jqueryui.com/demos/dialog/

此外,您可能需要根据 https://developers.google.com/+/plugins/+1button/ 设置parsetags调用jQuery对话框的 open 事件。explicitgapi.plusone.render()

于 2012-02-06T17:00:23.390 回答