Hello World
Spiga

Gadget,又见Gadget - 浅尝Windows Live Contacts Gadget

2006-10-08 16:43 by 老赵, 2320 visits
前言

自从Windows Live推出开始,微软就加大了对于开发人员的“笼络”。上到Windows Live Gadgets和Windows Live Search Macro,下到Windows Live Toolbar和Messenger,每个产品纷纷通过某种方式提供API,这似乎已经是Windows Live系列产品的一个mandatory feature。迎合Web 2.0的Mashup理念,将中心转移到用户/开发人员,微软在这点上可谓煞费苦心。

这种做法似乎颇为有效,至少Gadgets在刚出现时将我“一举击溃”,让我“义无反顾”地投身到Gadgets开发队伍中去。不过随着不断地深入,我的热情也渐渐消退。如果说Gadget的一些不足还可以在以后弥补的话(事实上现在的确已经相当不错了),而一些“硬伤”则会很难有所改进。例如,Gadgets都会在一个iframe中执行,这个sandbox提供了强大的安全保证,却也对于Gagdet表现本身做了无比的限制。另外,例如Windows Live Spaces Gadgets取消了set/getPreference功能,也几乎让其存在的价值打了很大的折扣。因此Book List Gadget for Windows Live Spaces(这是我为了弥补中国市场Windows Live Spaces开发的Gadget,使用了Amazon的API)也成为了我以“个人身份”开发的最后一个Gadget。

说得有点远了,收回。近日在Windows Live Dev里发现了一个新的Feature(其实已经出现一个多月了):Windows Live Contacts Gadget (Beta),一试之下,颇为有趣。

Windows Live Contacts Gadget可能是一个创举,它能够将Windows Live Account上的联系人信息提供给任意第三方使用。任意第三方的产品可以轻易地结合这些联系人信息进行开发(后面将会看到它与Windows Live Local结合的范例)。要做到这点,从技术上来讲,要解决的问题主要就是Cross Domain Data Transfer。Windows Live Contacts Gadget使用了一个它称之为channel的技术巧妙地解决了这一点,虽然我觉得还不完美。不过现在不讨论太多技术,我也只是做了一个尝试,所以先来看一个Quick Start吧。


Quick Start

要使用Windows Live Contacts很简单,按照一下几步即可:

1、添加channel文件:

http://dev.live.com/scripts/AddressManager/channel.htm复制到网站的根目录下。例如网站Domain是http://www.jeffzlive.net,则channel文件则是http://www.jeffzlive.net/channel.htm


2、引入必须的Javascript:

在代码中添加如下的Javascript引用:
<script type="text/javascript" src="http://dev.live.com/scripts/AddressManager/ContactSelectorPartner.js"></script>
<script type="text/javascript" src="http://dev.live.com/scripts/AddressManager/proxy.js"></script>


3、构造一个所需的HTML元素,作为Windows Live Contacts Gadget的容器:

在代码里添加如下的的HTML元素:
<div id="ContactsGadgetSite" style="width:250px;height:350px"></div>
<div id="ContactsDisplay"></div>

第一个元素ContactsGadgetSite是做为Gadget的容器存在的,因此对于它的大小有一定要求,其最小宽度为172px,最小高度为232px。第二个元素ContactsDisplay则是用来显示信息,在这个Quick Start中会使用到。


4、添加调用代码:

在某处添加如下代码,执行这段代码将初始化Windows Live Contacts Gadget:
<script type="text/javascript">
    
var CP = new Microsoft.Gadget.ContactSelectorPartner(
        document.getElementById(
"ContactsGadgetSite"),
        "
http://www.jeffzlive.net/privacyStatement.html", //privacy statement URL
        "name,email"//comma delimited list of requested columns to return
        receiveData, //callback function
        "http://www.jeffzlive.net/channel.htm");  // communication endpoint in your domain
</script>

其中第三个参数所需要的联系人的信息,用逗号分割。可以使用的参数是:name(姓名或昵称,如果没有填写的话则使用passport account的E-mail。)、email(主要E-mail、如果没有填写,则使用个人E-mail或Business E-mail)、phone(主要电话号码)、firstname、 middlename、lastname、nickname、passportname(用户的Mirosoft Passport ID)、emailpersonal、emailbusiness、emailother、phonepersonal、phonebusiness、phonemobile、phonepager、phonefax、phoneother、personalstreet、personalcity、personalstate、personalcountry、personalpostalcode、businessname、businessstreet、businesscity、businessstate、businesscountry、businesspostalcode、websitepersonal、websitebusiness。


5、添加回调函数:

添加回调函数的定义,例如:
<script language="javascript">
    
function receiveData(p_command, p_contacts)
    {
        
var msg;
        
switch (p_command)
        {
            
case "SIGN_OUT":
                msg 
= "user is not signed in to live.com";
                
break;
            
case "SIGN_IN":
                msg 
= "user is signed in to live.com";
                
break// user is signed in
            case "DATA":      // here comes the data!
                var msg = "Done! " + p_contacts.length + " records received. <br>";
                
for (var i = 0; i < p_contacts.length; i++)
                {
                    msg 
+= "<p>";
                    msg 
+= "Name: " + p_contacts[i].name + "<br>";
                    msg 
+= "Email: " + p_contacts[i].email;
                    msg 
+= "</p>";
                }
                
break;
        }

        document.getElementById(
"ContactsDisplay").innerHTML = msg;
    }
</script>

p_contacts是请求的联系人数组。只有当p_command为“DATA”时,p_contacts才会有数据。


到这里,这个Quick Start就完成了。


使用效果

1、打开Quick Start,如果您没有登陆Windows Live,则会看到下面的提示。



请点击Sign in并在弹出窗口内登陆。


2、登陆Windows Live后出现的页面:




3、选择一项或多项,并点击Send select contacts按钮,则会弹出窗口:




4、点击Send按钮,则页面中的回调函数则会被执行,页面中会显示信息:




从上面的例子里可以看出Windows Live Contacts Gadget的大致功能。我另外也部属了一个Mapping your contacts在我的Web Host上,可以看出使用Windows Live Local与Windows Live Contacts Gadget进行Mashup有多么的简单。

点击这里查看Quick Start。


缺点

可是缺点依旧存在,而且其严重程度可能导致了Windows Live Contacts Gadget无法让人接受。目前我认为最严重的问题是:

1、如果联系人多,浏览器会出现比较长时间的假死现象。
2、浏览器的“历史”被严重摧残。Windows Live Contacts Gadgets使用了iframe,因此这几乎是无法避免的缺陷。

事实上问题不止这些,官方也提供了Known Issues的列表,详情请见:http://dev.live.com/contactsgadget/knownissues.aspx

Windows Live Contacts Gadget要真正成功的话,真可谓“路漫漫其修远兮”……


参考

Windows Live Dev - Windows Live Contacts Gadget (Beta)
http://dev.live.com/contactsgadget/

Momentary Gouts of Reason
http://blogs.msdn.com/dthorpe/archive/2006/08/18/706422.aspx

Building a Mashup with the Windows Live Contacts Gadget and Virtual Earth
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlive/html/mashupWLContacts.asp?_r=1



Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

18 条回复

  1. 老赵
    admin
    链接

    老赵 2006-10-08 16:44:00

    总算发出去了,下午的时候园子好卡啊,Post两篇东西好辛苦……:(

  2. TerryLee
    *.*.*.*
    链接

    TerryLee 2006-10-08 17:14:00

    老赵对Gadget研究颇深啊,呵呵:-)

  3. 老赵
    admin
    链接

    老赵 2006-10-08 17:21:00

    @TerryLee
    其实不写Gadget已经很久了……:)

  4. 阿不
    *.*.*.*
    链接

    阿不 2006-10-08 17:21:00

    不错不错,还希望能多多介绍Gadget技术。

  5. 老赵
    admin
    链接

    老赵 2006-10-08 17:22:00

    @Lee[匿名]
    Wow,我的Blog上出现的第一篇广告……

  6. dudu
    *.*.*.*
    链接

    dudu 2006-10-08 17:28:00

    @Jeffrey Zhao
    广告已经被清除。

  7. 老赵
    admin
    链接

    老赵 2006-10-08 17:29:00

    @阿不
    我觉得Gadget这东西商业性比技术性高太多,因此对专注于技术的个人来说没有很多可以推敲的地方。还有就是Gadget的可塑性没有想象中高,呵呵……

    还有就是Windows Live Gadget,Windows Live Spaces Gagdet、Windows Live Contacts Gagdet还有Windows Sidebar Gadget都是不同的东西,据说以后想来一个大一统?我比较难以想象这点会怎么做……

  8. 老赵
    admin
    链接

    老赵 2006-10-08 17:29:00

    @dudu
    谢谢。:)

  9. 老赵
    admin
    链接

    老赵 2006-10-08 18:04:00

    文章里漏了查看Quick Start的页面链接,已经补上。
    http://www.jeffzlive.net/Samples/WLContactGadget/QuickStart.htm

  10. aspnetx
    *.*.*.*
    链接

    aspnetx 2006-10-08 18:51:00

    学到新东西了

  11. 老赵
    admin
    链接

    老赵 2006-10-08 19:49:00

    :)

  12. buliangdedeng
    *.*.*.*
    链接

    buliangdedeng 2006-10-09 08:18:00

    @Jeffrey Zhao
    对我来说是新东西,支持一下!

  13. 老赵
    admin
    链接

    老赵 2006-10-09 10:20:00

    @buliangdedeng
    其实的确是新东西。:)
    不过还不成熟,还无法真正使用。

  14. Allegoria[未注册用户]
    *.*.*.*
    链接

    Allegoria[未注册用户] 2006-10-11 12:26:00

    恩,新东西要学习。

  15. 老赵
    admin
    链接

    老赵 2006-10-11 23:49:00

    :)

  16. 蛙蛙池塘
    *.*.*.*
    链接

    蛙蛙池塘 2006-12-03 11:00:00

    Mashup 是啥意思?
    联系人多了为什么不分页呀
    Gagdet这个词怎么理解?google和yahoo都有好像?

  17. 老赵
    admin
    链接

    老赵 2006-12-03 12:40:00

    @蛙蛙池塘
    “Mushup”的意思就是,将第三方的服务拿过来组成新的服务。Gadget理解为小工具吧,Google和Yahoo都有,不过Yahoo叫做Widget。至于分业不分页,要问设计人员了,呵呵。

  18. gadgets中文网[未注册用户]
    *.*.*.*
    链接

    gadgets中文网[未注册用户] 2007-03-13 08:26:00

    Gadgets中文网是gadgets的主题站点,提供gadgets开发教程,gadgets咨询,gadgets下载等服务。欢迎访问
    http://www.gadgets.net.cn

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我