Say "Hello World" to cnBlogs

Hihi, 大家好~

本人棕熊,经Dflying gg 和老赵 gg 介绍,发现了cnBlogs这样有趣的地方,于是也特地来注册了一个账户,一来方便学习其他人的经验,二来也能把偶的心得告诉大家,酱紫。

偶的专项是front-end developing, 现在正和Dflying gg, 老赵 gg 合作开发一个项目,专职负责前端代码的开发。所以偶的blog也会以讨论front-end的技术为主,不论是初学级的,还是进阶的应用,只要有需要,都会涉及一些。权且在这里打个小广告,大家有兴趣的可以点导航栏上的“订阅”按钮。至于这个按钮什么作用,大家点了试试看就知道了

 

好吧,言归正传,既然是开发人员,那么就给cnBlogs一个小小的 hello world 程序做见面礼吧!

这个想法是在偶定制blog时想到的。希望能做一个漫画的comic bubble 的效果,让标题上的人物每隔一定时间就说一句搞笑的对话。这些对话的数据保存在偶的另一个网站上,而且这个网站上已经有了相应的web service,这里所要做的只是向这个service发出请求,然后把请求的结果在页面中显示。

通常要实现这种功能,一般会想到的解决方法是使用AJAX。但因为安全性沙盒的问题,一般浏览器都会禁止跨域的XMLHttpRequest。不过没关系啦,这个问题已经有很多成熟的解决方案。这里我使用的,是所谓的on-demand 方法。这个方法的核心是利用动态生成的SCRIPT元素代替XHR,来实现对跨域web service的调用。

 

以偶blog上的comic bubble为例:

 

- 需求
  • 从 ruxpinsp1.cnblogs.com 访问 mywebsite.com 上的 "GetFunnyWords" service

 

- 解决方法
  • 首先,在 ruxpinsp1.cnblogs.com 的HTML代码里加上这么个东东:
    1<span id="scriptH"></span><!-- 这个东东是用来盛放动态生成脚本的容器 -->
  • 然后,我们需要一堆javascript脚本
    // setWords 方法将 GetFunnyWords 服务返回的对话显示在页面中
    //
     @param r::String 这个就是返回的对话
    var setWords = function(r) {document.getElementById('randomWords').innerHTML=r;};

    // requestFunnyWords 通过新建一个SCRIPT元素,并设置其SRC属性,达到调用 GetFunnyWords 服务的目的
    var requestFunnyWords = function(){
        
    var s=document.createElement('SCRIPT');
        s.src
    ='http://myWebsite.com/GetFunnyWords'// 这个就是 GetFunnyWords 服务的 URL
        document.getElementById('scriptH').appendChild(s);
    }
    ;
    requestFunnyWords();
    这样,我们在cnblogs.com里要做的工作就告一段落了。
  • 然后我们来看看GetFunnyWords的返回吧
    1setWords("Hello World!");
    好玩的地方就在这里:GetFunnyWords的返回的返回本身正是一个javascript, 而这个javascript中,调用了我们在cnblogs.com里定义的setWords()方法,并通过这个方法,动态的设置了comic bubble里的内容。

 

这个方法并不是很困难吧。要注意的是,偶新建了一个SPAN元素用来放置动态生成的SCRIPT元素,而并没有把这个SCRIPT元素直接appendChild到BODY元素上。有兴趣的话大家可以考虑一下这是为什么,呵呵

posted @ 2008-04-16 17:11  棕熊  阅读(2321)  评论(32编辑  收藏  举报