原文:http://www.cnblogs.com/shellstudio/archive/2009/09/13/1565755.html
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);
分享到:
相关推荐
在实际开发中,还可以考虑使用其他图形库,如D3.js、Paper.js、Fabric.js等,它们提供了更高级别的抽象,简化了JavaScript图形编程,同时也提供了对SVG和Canvas的支持。这些库不仅简化了图形创建,还提供了动画、...
1. **HTML5 Canvas基本概念**:Canvas是一个基于矢量图形的HTML元素,通过JavaScript编程来绘制和修改图像。它可以用于创建动态图形、游戏、数据可视化等应用。 2. **Canvas API**:Canvas API提供了一系列的绘图...
这可能涉及到图像处理库,如OpenCV或 Pillow,在JavaScript中可能使用Canvas API。 “代码中国.txt”和“代码中国.url”可能是关于一个编程资源网站的信息,前者可能是该网站的介绍或使用指南,后者则可能是一个...
本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习...
- VML(Vector Markup Language)是用于在网页中绘制矢量图形的一种标记语言,常用于IE浏览器的兼容性问题,现在已被SVG(Scalable Vector Graphics)取代。 这份"HTML手册 javascript 页面"全面讲解了网页制作的...
通过阅读和理解源代码,不仅可以提升JavaScript编程技巧,还能掌握游戏开发的基本原理,如游戏循环、状态管理以及如何使用HTML5的Canvas进行图形渲染。 总的来说,这两个桌球游戏源码是学习和研究JavaScript和HTML5...
第21章 多媒体和图形编程 606 21.1 脚本化图片 606 21.2 脚本化音频和视频 608 21.3 svg:可伸缩的矢量图形 615 21.4 [canvas]中的图形 623 第22章 html5 api 658 22.1 地理位置 659 22.2 历史记录管理 662 22.3 ...
2. **Canvas元素**: HTML5的canvas是用于动态图形绘制的可编程区域。通过JavaScript的绘图API,可以在canvas上进行各种绘图操作,如线条绘制、填充形状、渐变等。在这个电子签名的例子中,canvas是用户签名的画布。 ...
CanvasJS的出现,极大地简化了Web开发者在网页上展示数据的方式,无需深入理解复杂的图形编程,即可轻松实现各种图表的绘制。下面将详细介绍CanvasJS的相关知识点。 **一、CanvasJS基本概念** 1. **HTML5 Canvas**...
总的来说,NotIE游戏借助HTML5的诸多优势,如Canvas绘图、JavaScript编程、Web Storage和Web Audio API等,打造了一款无需插件、兼容性强、互动性高的小型游戏。这不仅展示了HTML5技术的强大潜力,也为未来Web游戏的...
`<canvas>`元素是HTML5的核心特性之一,它允许开发者通过JavaScript进行动态图形绘制。在五子棋游戏中,我们需要用到`canvas`的绘图API,如`fillRect()`绘制棋盘格子,`beginPath()`、`moveTo()`、`lineTo()`绘制...
在IT领域,JavaScript(简称js)是一种广泛使用的前端编程语言,尤其在网页交互和动态内容生成方面发挥着重要作用。二维码生成则是将特定信息转化为二维图形的技术,常用于数据交换、链接跳转等场景。本资源“js...
然而,由于谷歌浏览器(Chrome)已不再支持Flash,可能无法直接运行这个游戏,除非该游戏使用了HTML5的Canvas或WebGL等技术来替代Flash的功能,以实现图形渲染。 压缩包中的文件很可能包括`index.html`、JavaScript...
Canvas动画的灵活性很高,但需要更多的编程知识。 7. **Flash转Canvas**:随着Flash逐渐退出历史舞台,许多原有的Flash动画可以通过Adobe Flash CC转换为Canvas格式,利用Create.js等库来实现交互和动画效果。这种...
学习JavaScript的基础语法和编程模式是提高Web开发能力的基础。 - **jQuery**:是一个流行的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互等操作。通过学习jQuery,开发者可以更快速地实现复杂的...
HTML5引入了许多新特性,如`<canvas>`用于图形绘制,`<video>`和`<audio>`元素支持多媒体播放,`<input type="date">`等新输入类型,以及离线存储、地理定位等。对于新标签的浏览器兼容问题,可以使用Modernizr库...
jQuery,作为一款广泛使用的JavaScript库,自2006年诞生以来,极大地简化了JavaScript的DOM操作,动画效果和事件处理,从而改变了前端开发的格局。这个名为“jQuery发展历程横向时间轴代码”的压缩包,显然为我们...