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 棕熊 阅读(1357) 评论(30)  编辑 收藏 所属分类: JavaScript

  回复  引用    
#1楼 2008-04-16 17:35 | Caling [未注册用户]
大胡子好有情调噢!
  回复  引用  查看    
#2楼 [楼主]2008-04-16 17:48 | 棕熊      
@Caling
你啊,有空也去写~
  回复  引用  查看    
#3楼 2008-04-16 19:13 | zitsing      
不错
  回复  引用    
#4楼 2008-04-16 20:11 | Duron800 [未注册用户]
羡慕博主,我给Dflying投的简历都没有回信了。估计是自己水平不行吧。
  回复  引用  查看    
#5楼 [楼主]2008-04-16 23:01 | 棕熊      
@Duron800
cft momo~
Dflying gg 现在正在米国公干中,所以最近都没顾上回应招聘的事情啦@@|||
  回复  引用  查看    
#6楼 2008-04-17 02:54 | Dflying Chen      
great start, wonderful style!
  回复  引用  查看    
#7楼 2008-04-17 08:18 | 随风逝去(叶进)      
it's cool
  回复  引用  查看    
#8楼 2008-04-17 10:00 | looping      
It's so cool.
  回复  引用  查看    
#9楼 2008-04-17 10:48 | 杨正祎(阿一)      
热烈欢迎,以后请多多指教。
博客园的牛人有多了一个呀。呵呵~~
  回复  引用  查看    
#10楼 2008-04-17 15:59 | Justin      

 btw:拿枪那个怎么是老虎呀,哈哈

  回复  引用  查看    
#11楼 2008-04-17 21:06 | 侯垒      
太好看了,原来右上角还有音乐.
  回复  引用  查看    
#12楼 2008-04-17 21:23 | 任力      
确实不错!
不愧是Dflying gg 和老赵 gg 介绍的!
很强大
  回复  引用  查看    
#13楼 2008-04-17 21:26 | 高_超      
确实是牛人啊.我这里怎么看不到"music",郁闷.我最欣赏webService的做法.呵呵.
  回复  引用    
#14楼 2008-04-17 21:41 | Duron800 [未注册用户]
@棕熊
--引用--------------------------------------------------
棕熊: @Duron800
cft momo~
Dflying gg 现在正在米国公干中,所以最近都没顾上回应招聘的事情啦@@|||
--------------------------------------------------------
谢谢安慰。

--引用--------------------------------------------------
Dflying Chen: great start, wonderful style!
--------------------------------------------------------
不知道你收到我的简历了吗?


  回复  引用  查看    
#15楼 [楼主]2008-04-17 23:46 | 棕熊      
@杨正祎(阿一) & @任力
哪里哪里啦,你们过奖了啦,呵呵

@Justin
只是为了好玩啦X"D

@侯垒
恩,因为考虑到不是所有人都喜欢背景音乐,所以默认关闭的

@高_超
背景音乐其实是个flash, 所以没有装或者禁用了flash可能就看不到了吧^^"
  回复  引用  查看    
#16楼 2008-04-21 15:36 | 爱在戏院前      
顶,凡是Dflying 和老赵推荐的我都支持
  回复  引用  查看    
#17楼 [楼主]2008-04-21 15:44 | 棕熊      
@爱在戏院前
多谢多谢拉X"D
  回复  引用  查看    
#18楼 2008-04-21 16:07 | 狼Robot      
学习
  回复  引用    
#19楼 2008-04-21 16:32 | 圆木菠萝头 [未注册用户]
老赵推荐的,多写些基础文章啊。。。!!!
  回复  引用  查看    
#20楼 2008-04-22 03:43 | Cat Chen      
还有一个跨域Ajax的方法,就是多层嵌套IFrame。
  回复  引用  查看    
#21楼 2008-05-19 10:46 | 痴情客      
来这里却不介绍你的性别,这样的博客写的再好也是空谈 ,连起码的诚信度都没有
  回复  引用  查看    
#22楼 2008-05-19 10:47 | 痴情客      
是男是女呢? 还希望楼主告知 ,谢谢!
  回复  引用    
#23楼 2008-05-21 00:27 | net10 [未注册用户]
请问最后那个为什么是为什么啊?为什么不直接写个函数?而反而追加到一个SPAN里啊?
  回复  引用  查看    
#24楼 2008-05-21 11:19 | 痴情客      
--引用--------------------------------------------------
net10: 请问最后那个为什么是为什么啊?为什么不直接写个函数?而反而追加到一个SPAN里啊?
--------------------------------------------------------

这个我认为没有什么好纠缠的。 并且楼主append到span里本身就是个不好的习惯 ,append到head标签才是标准做法 ,不是吗?
  回复  引用    
#25楼 2008-06-03 19:59 | kr [未注册用户]
Microsoft JScript 运行时错误: 'document.getElementById(...)' 为空或不是对象


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
var setWords = function(r) {document.getElementById('randomWords').innerHTML=r;};
var requestFunnyWords = function()
{
var s=document.createElement('SCRIPT');
s.src='http://myWebsite.com/GetFunnyWords'; // 这个就是 GetFunnyWords 服务的 URL
document.getElementById('scriptH').appendChild(s);
};
requestFunnyWords();
setWords("Hello World!");
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<span id="scriptH"></span><!-- 这个东东是用来盛放动态生成脚本的容器 -->
</div>
</form>
</body>
</html>

  回复  引用  查看    
#26楼 [楼主]2008-06-04 09:31 | 棕熊      
@kr
这段script应该写在body里,<span id="scriptH"></span>的后面。你这样写的时候,文档加载到header里的script就运行了,而那个时候文档里还没有<span id="scriptH">,所以自然找不到这个元素了
  回复  引用  查看    
#27楼 [楼主]2008-06-07 11:23 | 棕熊      
@kr
这个 s.src='http://myWebsite.com/GetFunnyWords" target="_new">http://myWebsite.com/GetFunnyWords'; 是个假的URL, 这是你需要在服务器端实现的,最终 http://myWebsite.com/GetFunnyWords" target="_new">http://myWebsite.com/GetFunnyWords 的输出应该是类似于 setWords("Hello World!"); 的一段js脚本,而不是给你在这个页面里直接调的啦
  回复  引用  查看    
#28楼 2008-06-23 15:42 | 痴情客      
感觉你像个女人
  回复  引用    
#29楼 2008-06-24 23:09 | ba [未注册用户]
做得真不错。。。那个input的样式是用背景做的吧。。。感觉还不错呢。。
  回复  引用  查看    
#30楼 [楼主]2008-06-26 16:33 | 棕熊      
@ba
对。在IE下用了点javascript,因为IE不支持:focus
样式表提供了很多可能性,灵活应用是关键

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-16 17:37 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 

版权声明

除特别声明外,本站一切资源均适用于
Creative Commons License This work by 棕熊 is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 China Mainland License
PS: 这个blog目前暂时不能完美支持IE6