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 服务返回的对话显示在页面中这样,我们在cnblogs.com里要做的工作就告一段落了。
// @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(); - 然后我们来看看GetFunnyWords的返回吧
1setWords("Hello World!");好玩的地方就在这里:GetFunnyWords的返回的返回本身正是一个javascript, 而这个javascript中,调用了我们在cnblogs.com里定义的setWords()方法,并通过这个方法,动态的设置了comic bubble里的内容。
- 首先,在 ruxpinsp1.cnblogs.com 的HTML代码里加上这么个东东:
这个方法并不是很困难吧。要注意的是,偶新建了一个SPAN元素用来放置动态生成的SCRIPT元素,而并没有把这个SCRIPT元素直接appendChild到BODY元素上。有兴趣的话大家可以考虑一下这是为什么,呵呵