向网页动态注入dojo工具包
来源:互联网 发布:us时时彩源码 编辑:程序博客网 时间:2024/06/07 01:08
学习任何工具包的最好方法就是亲自试用一下。要试验dojo的功能,按照《dojo权威指南》介绍的方法,你可以编写一个简单的HTML文件,在该文件中引用dojo,尝试某些功能,并使用firebug来调试。不过这涉及到每次要修改HTML模板文件和部署...如果你正在浏览某个讲解dojo的网页,只是想即兴一试,难道还非要这么复杂吗?
这里介绍一个更酷的方法,让你可以在任何网页中加载dojo并立即在firebug控制台中使用dojo。
牢记加载dojo总共需要三步:
- 创建脚本标签,引入dojo.js
- 创建样式标签,引入相应的样式文件
- 为body元素添加样式。
如果只试用dojo的核心功能,则可以省掉后面两步。
那么,如何通过firebug控制台加载dojo呢?首先,假设你已经打开了firebug的控制台。在控制台里敲入下列语句:
var dojoURL = "http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js";var dojoCSS = "http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dijit/themes/claro/claro.css";var script = document.createElement("script");script.src = dojoURL;document.getElementsByTagName("head")[0].appendChild(script);var link = document.createElement("link");link.rel = "stylesheet";link.type = "text/css";link.href = dojoCSS;document.getElementsByTagName("head")[0].appendChild(link);var _timer, counter = 20;var checkDojo = function(){ if (counter-- <= 0){ clearInterval(_timer); console.log("Failed to load dojo after timeout reached."); } if (window.dojo){ console.log("dojo is ready"); dojo.addClass(document.body, "claro"); if (_timer){// it's possible dojo is already loaded clearInterval(_timer); } }}_timer = setInterval(checkDojo, 500);这段代码需要略为解释一下。代码使用了google CDN分发dojo,注意这个版本是release版,因此如果你需要查看其源代码并进行这一级别的调试,你需要直接使用dojo的svn(HTTP方式)地址。
开头两段是动态修改DOM以插入dojo相关的元素。当DOM中插入新的元素后,DOM会立即解析它们,并下载,装入。为了对用户友好一些,代码中加入了检查dojo是否加载成功的代码。这里使用了setInterval方法来轮询。除此之外,也可以使用window的'load'事件来异步检查。但是该方法并不见得比轮询来得更好。当你打开firebug控制台时,总是对应着某个网站,如果该网站页面设计复杂,则通过window的'load'事件来确保dojo加载完成,往往会比轮询来得慢。
现在你就可以运行一下上面的代码...firebug控制台会输出dojo is ready...
现在的问题是,如果需要每次都在firebug控制台输入上面的语句,这还不如新建一个HTML文件来引入dojo呢...毕竟也可以把HTML存为模板,每次只修改一小部分...
现在我们来看看这个方法最引人入胜的地方:使用bookmarklet!
bookmarket是bookmark和applet的合成词,它是指你可以在浏览器里创建一个书签,但该书签并不是使用的http协议,而是javascript协议。据我所知,IE和firefox都支持这一协议。现在,我们就来创建一个bookmarklet。
首先,让我们打开页面www.dojotoolkit.org。访问这个页面是因为当我们创建书签时,酷一点的浏览器会从当前页面中提取favicon。这样我们的bookmarklet也会看上去更酷。dojotoolkit.org的favicon目前是
现在,按ctrl+d以创建一个书签,名称栏写作installDojo好了,地址栏写成:
javascript:(function(){alert("hello, this is a bookmarklet");})()
保存,点击该书签,你会得到如下对话框:
好了,这说明我们的bookmarklet创建成功了。下一步,我们要将地址栏里的内容换成我们刚刚测试过的脚本。这需要三步:
1. 将javascript:(function(){alert("hello, this is a bookmarklet");})()中的黑体字换成我们刚刚测试过的脚本。其结果如下:
javascript:(function(){ var dojoURL = "http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js"; var dojoCSS = "http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dijit/themes/claro/claro.css"; var script = document.createElement("script"); script.src = dojoURL; document.getElementsByTagName("head")[0].appendChild(script); var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = dojoCSS; document.getElementsByTagName("head")[0].appendChild(link); var _timer, counter = 20; var checkDojo = function(){ if (counter-- <= 0){ clearInterval(_timer); console.log("Failed to load dojo after timeout reached."); } if (window.dojo){ console.log("dojo is ready"); dojo.addClass(document.body, "claro"); if (_timer){// it's possible dojo is already loaded clearInterval(_timer); } } } _timer = setInterval(checkDojo, 500); //console.log是firebug中很常用的命令,但敲起来太烦了,用个别名吧 this.log = console.log; this.ls = console.dir; })();
2. 这个脚本如果直接将其贴到创建书签对话框的地址栏,运行时会出错。我们需要将其压缩转换一下。可以使用在线压缩工具http://jscompress.com/
3. 现在将转换后的代码贴到创建书签对话框的地址栏,保存。就在http://jscompress.com窗口里运行该bookmarklet,你将在firebug控制台中看到dojo is ready。再输入下面的语句试试:
dojo.fadeOut({node:document.body}).play()
Ctrl + Enter运行,窗口输出淡出。dojo确实加载进来了。
- 向网页动态注入dojo工具包
- [译] Dojo 工具包参考手册
- 掌握 Dojo 工具包
- 掌握 Dojo 工具包
- 掌握 Dojo 工具包
- 掌握 Dojo 工具包 总目录
- 浅谈 Dojo 中的安全工具包
- 浅谈 Dojo 中的 DTL 工具包
- dojo-amd-converter工具包简介
- 掌握 Dojo 工具包,第 1 部分: Dojo 入门简介
- 掌握 Dojo 工具包,第 1 部分: Dojo 入门简介
- 掌握 Dojo 工具包,第 2 部分: XHR 框架与 Dojo
- 掌握 Dojo 工具包,第 3 部分: Dojo 事件机制
- 掌握 Dojo 工具包,第 4 部分: Dojo 中的拖拽
- 掌握Dojo工具包,第1部分:Dojo入门简介(1)
- 掌握Dojo工具包,第1部分:Dojo入门简介(2)
- 掌握 Dojo 工具包,第 2 部分: XHR 框架与 Dojo
- 掌握 Dojo 工具包,第 1 部分: Dojo 入门简介
- C#中全角,半角的转换
- SQL 模糊查找用法
- Javascript一些使用的小结
- 造轮子----直接插入排序算法C++实现
- 概述反射和序列化(转)
- 向网页动态注入dojo工具包
- dataGridView中的复制
- 简单的apachebench
- python中函数的几个小知识点
- 多线程12天--09
- 反射
- 编写Java程序时碰到的问题
- sql server 2005中的分区函数用法(partition by 字段)
- 一次谷歌面试趣事