ie下使用扩展canvas的javascript图形编程
来源:互联网 发布:windows手机版主题 编辑:程序博客网 时间:2024/05/21 04:22
IE下使用excanvas.js之后,动态创建的canvas不支持getContext的解决方法
引入excanvas.js以后,在ie下,文档中的canvas就可以用了,但是如果是通过createElement方法创建的就不行了
var canvas=document.createElement(”canvas”);
if(canvas.getContext){
alert(”support getContext()”);
}
这段代码在ie下不工作,于是把google搞的这个让ie支持canvas的代码大概地读了一遍,知道了是怎么回事。将代码放到aptana里面看,10分钟不到,785行代码,还不错,我想,这得益于之前仔细看过犀牛书前面js core部分7遍以及对canvas和vml的了解吧。
原来,加载并执行excanvas.js这个脚本代码的时候,G_vmlCanvasManager_.init();这句语句遍历了页面中所有的canvas元素,然后初始化这些元素,亦即是将标准canvas的那些个方法赋予ie下的canvas:
var els = doc.getElementsByTagName(”canvas”);
for (var i = 0; i < els.length; i++) {
if (!els[i].getContext) {
this.initElement(els[i]);
}
}
如果是文档原来就有的canvas标签,那就没有问题,这段脚本将找到的canvas元素作为参数传递给G_vmlCanvasManager_.initElement()这个方法。但是通过createElement方法创建的canvas就不行了,因为调用这段脚本的时候,后来新创建的canvas元素还没有被它找到。
那么,解决办法就是新创建了一个canvas元素就调用G_vmlCanvasManager_.initElement()方法来初始化。
但是,G_vmlCanvasManager_是在一个匿名函数function(){}里面定义的,我在全局范围下就没有办法引用到,还好,在excanvas.js文件的后面,有一句语句,
G_vmlCanvasManager = G_vmlCanvasManager_;
由于js的函数中,如果一个变量不通过var来定义,那么就会把这个变量当作一个全局变量,好啦,现在有一个全局变量来引用它了。
那么,下面是解决问题的代码:
$(function(){
var canvas=document.createElement(”canvas”);
document.body.appendChild(canvas);
if($.browser.msie){
canvas=window.G_vmlCanvasManager.initElement(canvas);
}
if(canvas.getContext){alert(”support”);}
});
这里我用了jquery,在DOM ready以后才执行这段脚本。
另外,记得canvas=window.G_vmlCanvasManager.initElement(canvas);之前要将新创建好的canvas追加到文档流中:document.body.appendChild(canvas);
- ie下使用扩展canvas的javascript图形编程
- 图形编程——Paint和Canvas的基本使用
- Android图形编程(1):Canvas使用
- IE下canvas使用问题归集
- canvas的IE实现与javascript库
- 用firefox的canvas标签绘制简单的图形(firefox下可以执行,IE不可以)
- 使用 HTML5 canvas 绘制精美的图形
- 使用 HTML5 canvas 绘制精美的图形
- Canvas:使用JavaScript进行基本图形操作与处理
- 趣味编程-JavaScript-使用画布画画canvas
- Windows 下的JavaScript调试 -- 使用IE Developer Tools
- DOS下的图形编程
- Canvas的图形变换
- 使用canvas画不规则图形
- HTML5使用canvas绘制图形
- 使用canvas来绘制图形
- HTML5使用canvas绘制图形
- 使用Canvas绘制各种图形
- 标准C++中的string类的用法总结
- xml基础学习
- s3c2440的ADC触摸屏驱动——学习笔记
- PHP新闻管理系统需求分析
- Supervisor with gen_server
- ie下使用扩展canvas的javascript图形编程
- sql 语句实用东东
- HDU 2206
- ZT - Java学习笔记:Java中处理字符串
- Page、request、session、application四个域的使用与区别
- 分布式命令模式——互联系统的一种可扩展的命令模式
- 无重复随机数的产生方法
- Source Insight 使用汇总
- 域对象