按 ‘ 新浪 ’ 标签归档

微博分享按钮

三年前往博客里添加了一个微博分享按钮,最近发现微博分享方式有WBML新版了,于是按照微博介绍的WBML界面重写了这段代码。

先贴代码。新版的添加微博分享按钮的方法:编辑正在使用的monochrome族主题(其它主题可能要微调)的header.php,做两个改动:

一、在<html>标签后增加wb命名空间:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:wb="http://open.weibo.com/wb">

二、在</head>之前加入以下代码:

<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
jQuery(function(){
//  window.setTimeout(function() {  // Make it asynchronous if using the iframe mode.
    jQuery('div.post').each(function() {
        var url = jQuery(this).find('h2.post_title > a').first().attr('href');
        if (typeof(url) == 'undefined') {
            url = location.href;
        }
        var titlestr = jQuery(this).find('.post_title').text() + ': ' + jQuery(this).find('p').not('.wp-caption-text').text();
        titlestr = titlestr.replace(/\s\s+/g, ' ').substr(0, 110);

        var buttonstr = '<div style="width:95%;text-align:right;margin-top:-40px;margin-bottom:40px;">';

        var param = {
            url:url,
            type:'button',
            addition:'number',
            picture_search:'true',
            title:titlestr,
            ralateUid:'1691250947'  // 关联用户的微博用户号码
        };
        var temp = [];
        for(var p in param) {
            temp.push(p + '="' + encodeURIComponent(param[p] || '') + '"');
        }
        buttonstr += '<wb:share-button ' + temp.join(' ') + '></wb:share-button>';


        buttonstr += '</div>';
        jQuery(this).find('div.post_content').first().after(buttonstr);
    });        // jQuery.div.post.each
//  }, 5000);  // window.setTimeout
});
</script>

第一次重写后,IE不稳定地显示按钮、Firefox完全不行(IE竟然胜出,奇迹)。调试发现和一年前的一次优化有关。当时我把分享按钮的JS代码改为异步(橙色代码,页面加载完毕5秒后)运行,而此定时器似与WBML版按钮冲突。

之所以怀疑这个定时器,是因为观察了博客右边栏放置的静态代码“微博关注”按钮。我留意到它总能显示,并且当整个页面加载完毕、网页闲下来时才开始运作。猜想渣浪也发现这些按钮很耗时,于是也在按钮里内置定时器,把我这些外层的定时器顶得不干活了。

另注:渣浪程序员把“关联用户”的设置参数命名为ralateUid,嗯,从上一版延续至今以后也一直会继续错下去的拼写,厚道地猜想这是为了防鹅防寨故意拼错的。另外,微博文档里说抓图选项是searchPic,而快捷设置页里则可以看到是picture_search。我测试之后得知,picture_search是有效参数。

有趣的北京晚报

留意这篇微博的截图内容和它上面的“不实消息已处理”。
beijingwanbao-rumor
猛击阅读全文

“分享到新浪微博”按钮

在博客的每篇博文后都加入了“分享到新浪微博”按钮。方法是编辑monochrome的主题(theme),在header.php的</head>前加入这么一段代码:

<script type="text/javascript">
jQuery(function() {
    jQuery('div.post_content_wrapper').each(function() {
        var urlstr = jQuery(this).find('h2.post_title > a').first().attr('href');
        if (typeof(urlstr) == 'undefined') {
            urlstr = location.href;
        }
        var _w = 72 , _h = 16;
        var param = {
            url:urlstr,
            type:'3',
            count:'1',                  // 是否显示分享数
            appkey:'',
            title:'',
            pic:'',
            ralateUid:'1691250947',     // 关联用户的微博用户号码
            language:'zh_cn',
            rnd:new Date().valueOf()
        };
        var temp = [];
        for (var p in param) {
            temp.push(p + '=' + encodeURIComponent(param[p] || ''));
        }
        buttonstr = '<div style="width:100%;text-align:right;">';
        buttonstr += '<iframe allowTransparency="true" frameborder="0"';
        buttonstr += ' scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?';
        buttonstr += temp.join('&') + '" width="'+ _w+'" height="'+_h+'"></iframe></div>';
        jQuery(this).find('div.post_content').first().after(buttonstr);
    });
});
</script>

这个代码也许只在monochrome主题下工作,而对于其它的主题,需要稍事修改。

iframe所要显示的参数是从新浪微博开放平台获得的。

程序的小难点在于:显示单篇博文的时候,博文题目只是个简单的header,header上没有链接页面的URL。而显示多篇博文时,每个博文的题目上都链接了其单篇的URL。获取这个URL就需要一个条件判断,也就是这段代码:

var urlstr = jQuery(this).find('h2.post_title > a').first().attr('href');
if (typeof(urlstr) == 'undefined') {
        urlstr = location.href;
}

在自己机器上调好之后,把代码放到博客上时,还遇到一个惊奇。分享按钮根本不显示,好像这段代码根本未被调用一样。后来发现,在我的机器上,可以使用jQuery的缩略写法$(),而在博客网站上,必须老老实实写成jQuery()。

还有其它宇宙吗?

新浪爱问上总有些小孩,专门问一些貌似勤学好问的傻冒问题。例如这个:“我冒昧的问一下,是不是只有我们现在这一个宇宙呢?是否还有其他的呢宇宙吗?”(语法不通,原文如此)

俺的回答:

“宇宙”的一个较简单的定义是:一切现成的东西所构成的统一整体。照这个定义,“宇宙”这个概念是可以自我扩展的。只要你发现了从前未被发现的东西,它就自动加入现有的“宇宙”,成为它的一部分。

因此,即使有其他的“宇宙”,无非让现在人们认为的“宇宙”边沿扩大一些。假如人们只能看五公里远,就会定义方圆五公里内为“宇宙”。当发现五公里外还有别的东西时,就会重新定义“宇宙”为方圆十公里,而不把五公里外的东西算作其他“宇宙”的财产。

现在有人说:“可能有一个反宇宙。”事实上,如果有一天,人们果然发现了这个“反宇宙”,结果会如何呢?大家只会说:“在宇宙里发现了一个巨大的由反物质构成的星区哎。”而不会说:“我们发现了第二个宇宙。”

所以,按照这个逻辑,宇宙永远不会超过一个。