Javascript Widget入门解析

收到Erica的来信,希望知道采麦的Widget是怎么做出来的,突然想起当年我第一次写widget代码的时候,也是满世界找不到一个简明实用的教程。于是做个总结,也许更多人可以用得到。

复习一下两个js函数:

js可以动态生成网页代码,比如:

document.write(’<div id=”photo”>123</div>’);

这段代码可以让网页里显示出一个叫photo的层,里面还有数字123。

此外,js可以动态改变网页内容,比如这段代码:

document.getElementById(’photo’).innerHTML=’abc’;

就可以让这个photo层里显示abc,而不是原来的123了

别看这么一段小代码,其实这就是整个widget的核心了

技术原理:

widget有3个重要部分组成:数据、外壳、脚本。

  • 数据:就是你希望显示出来的内容,比如你要显示flickr上最近的照片,那么照片就是数据;
  • 外壳:就是容纳数据的容器,比如上述照片,你把他们包裹到一个叫photo的div里,那么这个div就是外壳。
  • 脚本:脚本的作用是生成外壳,并把数据填充到外壳里,主要就是js代码,当然也可以带一些css

所以,理论上,一个原始的widget代码应该是这样的:

<script type=”text/javascript”>//调用js脚本

document.write(’<div id=”photo”></div>’); //js脚本生成外壳photo

document.getElementById(’photo’).innerHTML=’abc’; //js脚本把数据abc填充到外壳photo

</script>

是不是很简单?是很简单,可惜太长了,于是把上面四行代码的中间两行提取出来,复制放到一个wjs.js文件里:

document.write(’<div id=”photo”></div>’); //js脚本生成外壳photo

document.getElementById(’photo’).innerHTML=’abc’; //js脚本把数据abc填充到外壳photo

这样只需要调用一下就可以使用widget了:

<script type=”text/javascript” src=”wjs.js”></script>

好了,到这里你已经学会了最简单的widget制作,快去实验一下吧。

基础进阶:

那么,如果数据不是abc怎么办呢? 很简单,把数据独立出来就可以了。我们改造一下wjs.js代码:

document.write(’<div id=”photo”></div>’);   //利用js建立photo层,生成外壳
document.write(’<script type=”text/javascript” src=”widget.js”></script>’); //js填充数据

数据就在widget.js里,我们分析一下其代码,只有一句:

document.getElementById(’photo’).innerHTML=’xxx’;

这样的话,要改变数据,只需要把widget.js里的xxx换成任何内容即可,而无需改动wjs.js

中级进阶:

如果要自动动态改变数据xxx,只需要把widget.js也做成动态的,以php为例,首先把wjs.js修改一下:

document.write(’<div id=”photo”></div>’);   //利用js建立photo层,生成外壳

document.write(’<script type=”text/javascript” src=”widget.php?user=howard></script>’); //js填充数据

注意里面的widget.js换成了widget.php,后面还跟了一串变量,这样就可以显示为howard量身定制的数据了,看看widget.php的代码:

<?php
Header( “Content-type: text/javascript”); //声明文件类型为js

$user=$_GET['user']; //读取user变量 (howard)

echo “document.getElementById(’photo’).innerHTML=’hi, my name is $user’; “;

//输出动态内容(hi, my name is howard)

?>

到这里,我们已经可以根据不同变量来自动显示不同的数据了。后面就很简单了,把widget.php任意改造,读取数据库,可以输出各种各样关于howard的数据。

实战应用:

事实上,实际应用中,wjs.js也被改造成了动态文件,比如wsj.php,这样你的用户howard只需要在其blog里插入以下代码,就可以真正实现个性数据调用:

<script type=”text/javascript” src=”http://domain.com/wjs.php?user=howard”> </script>

wjs.php的内部代码是这样的:

<?php
Header( “Content-type: text/javascript”); //声明文件类型为js

$user=$_GET['user']; //读取user变量 (howard)

echo “document.write(’<div id=”photo”></div>’);”   //利用js建立photo层,生成外壳

echo “document.write(’<script type=\”text/javascript\” src=\”widget.php?user=$user\></script>); “; //动态调用widget.php

?>

这样,widget.php收到了user变量之后,就能显示出howard的个性数据。

先写到这,大家可以先回去测试一下。真正能用的widget,代码和上面有很大区别,但是原理是相同的。



 
 
 

13 Responses to “Javascript Widget入门解析”

  1. erica   8. February 2009 at 02:28

    鼓掌鼓掌,写得简单易懂~~
    我现在基本框架都明白了~~希望试验成功~~

  2. risent   26. February 2009 at 19:56

    前天借来的Ajax设计模式,今天正好看到这段代码,不是很明白,不知道怎么用,这回看清楚拉!

  3. jishao   4. March 2009 at 16:42

    最近没有新博客了,要加油继续写啊。

  4. artisyJitalry   13. March 2009 at 04:17

    Thank you!

  5. LeX   11. April 2009 at 03:17

    Да это нечто. С этим трудно не согласится, но трудно поспорить. Сколько людей столько и мнений. Удивительная вещь эта жизнь.

  6. Werewolf   12. April 2009 at 18:53

    Доброго времени суток, уважаемые коллеги и друзья. Много времени я потратил на поиски хорошего блога сходной тематики, но многие из них не устраивали меня отсутствием или недостатком информации, глупыми интерфейсами и прочим. Сейчас я нашёл что хотел и решил внести свой комментарий. Хотелось бы, уважаемые господа администраторы, чтоб ваш блог и далее развивался таким темпом, количество людей неуклонно росло, а страниц становилось всё больше и больше. Адрес вашего блога запомнил надолго и надеюсь войти в ряды самых активных пользователей. Огромное спасибо всем, кто меня выслушал и уделил минутку свободного времени на прочтение данного комментария. Ещё раз спасибо. Виталий.

  7. Evgen80   20. April 2009 at 08:55

    Вчера шел по улице, капал дождь и только на секунду я понял, как класно жить и ходить по земле. Мы за всеми нашими проблемами, и этой тоже, иногда забываем о совсем обыденных вещах - о людях, которые возле нас, о мире, который нас окружает. Главное токо по сторонам смотреть, в такие моменты чтобы под колеса не угодить. А так 100% отдых и релакс от природы получить можно, главное постараться.

  8. troy   7. May 2009 at 10:34

    很简洁的教程,非常容易理解和开始写Widget.

    不知道样式表的应用怎么写?

  9. Javascript Widget入门解析 - 牛也博客   3. June 2009 at 12:18

    [...] - 关键字: SEO 上一篇 “经济衰退”带给创业家的机会 联合推荐:《Bottle Shock》 下一篇 喜欢牛也博客的文章,那就通过 RSS Feed 功能订阅阅读吧! 相关文章 No Related Post 随机文章 [...]

  10. Tibet Tour   9. June 2009 at 10:50

    不错,学习了我会一点seo,现在正在用php开发网站,这个方法来得及时

  11. Howard   25. July 2009 at 12:46

    回troy:
    如需加样式表,只需在wsj.php理加一段:
    document.write(’ ‘);

    就可以读入样式表widget_css.css了

  12. Герман   28. July 2009 at 00:06

    Благодарен. Появилась новая мысль, но потребует частичной реорганизации предыдущей идеи, займусь на днях. Естественно результатами поделюсь с читателями блога!

  13. Скворцов   8. January 2010 at 07:15

    Интересный момент, двояко понимается как то.

Leave a Reply