Apr 16

How to save canvas as an image(Chrome, Firefox, IE)

 

Save canvas as an image in chome and firefox is easy, the code below will work.

....
function saveAsImage(ele){
    var c=document.getElementById("myCanvas");
    var image = c.toDataURL().replace("image/png", "image/octet-stream");
    ele.download = 'image.png';
    ele.href = image;
}
....
<body>
    ...
    <a href="javascript:void(0)" onclick="saveAsImage(ele)">downloadCanvas</a>
    ...
<body>

But, in IE(obsolutely in IE>=9), the code does not work, after some investigation in MSDN, I found a work around:

function saveAsPng(ele){
    window.BlobBuilder = window.BlobBuilder || window.MSBlobBuilder || 
           window.WebKitBlobBuilder || window.MozBlobBuilder;
    var toBlob = c.toBlob || c.msToBlob;
    var saveBlob = window.navigator.saveBlob || window.navigator.msSaveBlob;
    if(window.BlobBuilder && toBlob && saveBlob){
        var blobBuilder = new window.BlobBuilder();
        blobBuilder.append(toBlob.bind(c)());
        saveBlob.bind(window.navigator)(blobBuilder.getBlob(), "image.png");
    }else{
        var image = c.toDataURL().replace("image/png", "image/octet-stream");
        ele.download = 'image.png';
        ele.href = image;
    }
}

The “BlobBuilder”, “toBlob” and “saveBlob” methods can use in MS browser, so we use these methods to recognize MS browser.

Jan 06

Forward-Backward function in Chrome

    Nowadays we are familiar with the forward and backward function of browser, but may be little of us know the real algorithm of it. In a recent project, I have to simulate a forward-backward function for our ajax based web application. So I spend some time on the forward-backward algorithm of Chrome. Continue reading

Dec 09

Tomcat6.1X配置详解

 1.         配置应用的方式有两种:1)在host下配置context。2)在$CATALINA_HOME/conf/[enginename]/[hostname]下新建一个应用描述文件,其中描述Context。

2.         配置完全局JNDI资源需要在Context.xml中做资源连接
<ResourceLink name="jdbc/mysql"   global="jdbc/mysql "   type="javax.sql.DataSource"/>
 
3.         Host中配置的虚拟主机目录下,默认目录为ROOT(区分大小写)。
Jun 17

CSS中的position跟padding

        这些天一直在弄css相关的东西,一直都比较怕搞这个东西,做的很郁闷。以前跟一牛人聊天,说是觉得郁闷烦恼是好事儿,烦一段时间就好了,当你觉得做什么事儿都不烦的时候你就变得很牛了,真希望早点儿能变到那么牛。         言归正传,上一次有组织过一次css的培训,可没讲到什么重点的,提上去的问题也因为时间问题没有讲到,还是得自己慢慢琢磨。 Continue reading

Feb 21

Ext2.0之事件模型分析

今天研究了一下Ext2.0中的事件模型,它是用是Observer模式实现的。首先有一个Event对象,Event对象中会保存一个监听者Listener集合,以及fire方法用于通知监听者,该Event对应一个事件对象,当该事件触发则Event对象会通知所有注册到该事件上的监听者。接着有一个Observable对象,Observable中有一个Event对象集合,Component(Ext2.0中所有的容器的基类)会实现这个Observable Continue reading

Feb 19

ext2.0之Grid控件实践

    ext2.0里面有一个非常好用的gird控件,在实际使用的时候grid的数据肯定都是通过ajax请求去服务器上取的,这里对于显示gird有两种方式,第一种是不需要做页面,直接根据返回的数据将gird画到制定容器中,这种方式存在一个问题就是如果页面上不仅仅有gird,则其他的一些内容也得用js画出来,倘若页面结构复杂,js将变得异常恐怖,好处就是不需要做页面,而且也只需要一次请求。 Continue reading

May 22

不同浏览器中的js事件传播

今天看了些不同浏览器种js模型的差异,看的非常头大。下面简短记录一下js中不同浏览器中的事件传播模型。首先,在netscape公司的 navigator中事件是从顶部往下传播的,也就是从window级别一直向下传递到目标地点,这个目标地点的任何上层都可以对事件进行捕获,NN中是 用captureEvent来捕获事件,用releaseEvent来关闭对特定事件的捕获,而向指定目标传递事件则用routeEvent,由于没有 navigator做实验,这些方法暂时都没有实验过。在IE和firefox中则相对好说了,事件直接从目标地向上传播,只要给传递过程中的对象注册事 件处理程序,有事件传到就会触发事件处理程序,可以用cancelBubble方法来停止事件在某个对象上的传播,用fireEvent方法来直接将事件 发送到某个对象上,做了一个实验发现,调用fireEvent后事件是会被发送到指定的对象上,但是之后事件会继续回到调用fireEvent的对象的下 一个对象处继续向上冒泡。