Category: 非技术

前端为什么难搞? 看我任务栏中的窗口数有感

今天和一朋友聊起来,他截了个图给我,他的桌面上,遨游,IEtester,Firefox,Chrome,Safari,IE.. 各种浏览器都有,甚至还有一个ie7.bat 。 我看了一下我桌面的软件,发现我也安装了不少软件。 现在列一下我安装的软件(和前端开发有关的)。 图像处理软件:Photoshop,Fireworks  ; 写HTML+CSS的: Dreamweaver ; 写Javascript的: Aptana, Webstorm ; 做动画的: Flash ,Swishmax ; 写Actionscript的: Flashdevelop,Flex builder; 浏览器: IE8,Firefox,Chrome,Safari,Opera,IEtester; 写php的: Zend ; 画线框图的:Axure 突然觉得做前端的真悲剧,需要懂的东西真多。 你需要懂点美工,需要会HTML,css,要会写JS,AS,还要懂点后端的程序,这还不算完,用户体验也要顾得上,于是,还要会画画线框图。 要求真是令人发指。高投入,低回报,真是泪流满面。。。。 如果你也是做web的,你都安装了些什么程序?

获取js函数的名称

例如function a(){…} 那么a就是这个func的名称 如果var f = function a(){} 那么这个func依然是a,而f是一个引用。 如果var f = function(){} 这是个匿名函数,函数名为”。 除了IE之外,ff,sa,ch,op的函数都有name属性,比如a.name。 而IE下,我们只能调用函数的toString()属性,通过正则来获取。 我们污染一下原型 Function.prototype.getSelfName = function(){ return typeof this.name === ‘string’ ? this.name : /function\s+([^\{\(\s]+)/.test(this.toString()) ? RegExp['$1'] : ‘[Unknown]‘; }

写一个js文件的loader

我印象中,js脚本文件的loader似乎有,但是完美的,完美到像php的include或者cSharp的using的,貌似没有。有些团队据说有,但是没有一个公认的好的方式,或者说没有一个团队愿意拿出来共享,我觉得这说明,他们的方法都存在问题:或者代码冗余,或者存在n多不确定性,或者只适用于他们自己的环境。 注意我说的是一个文件的loader,是通过script标记的src属性调用,而不是将js代码通过innerHTML写到一个div或者什么标签里。 为什么要写loader呢? 比如jq的冗长是我们经常诟病的一个问题。我在冒死写我自己的类库的一开始,我就确定了一个事情:分文件写。也就是,一个核心的、公共的类库是必需的,然后根据页面需要挂所需的js文件。我觉得这个出发点还是不错的。但是后来我意识到,比如在ui部分,tab标签、无缝滚动、图片轮显、ajax等等诸多部分分在不同的文件中,而往往首页里这些都要用得到,那么,script标记在页头最多时有10个上下。当然,如果你不在意还行。我觉得有点蠢。 jq的冗长是我不要的,script标记过多也不是我要的,所以,我需要一个loader。 但是我还没想好。 这里只做一个简单的实现,实现通过js添加一个script标记,并且确保这个标记引入的文件会被执行。 想到的方式有两种:通过dom添加和通过document.write直接写。 通过dom方式是最方便、简单,并且标准的方式。只要通过document.createElement创建一个script标记,并且按照html标准添加type和src属性,然后把这个标记添加到页面当中去就可以了。但是如我们所知,如果我们不把具体的js代码放到window.onload当中去的时候,js标记的位置是个很重要的问题。也就是说,你的类库文件必须在前,实例应用必须在其后,不但js是逐行的,ie中html也tmd的是逐行的。在添加js标记时,我选择将标记放到head中。并且,head是一个默认标记,就像document,无论你的html中是否有head代码,head标记都是存在的。所以无需判断head标记是否存在,直接用head.appendChild即可。需要注意的问题有二:1、head的获取,在ie下是需要使用getElementsByTagName(‘head’)[0]来获得,其他浏览器直接document.head即可得到。2、执行顺序ie有所不同。我的感觉:在ie下,ie会重新理解标记位置,按script标记在head中的顺序逐行执行引入的文件;而其他浏览器,是按照引入的时间来执行的,比较复合人类的思路。 通过document.write方式,更直接。我先说一下我最终没有采用dom方式的原因:文件加载完成的时间不确定。我幻想过,当我添加了一个新的script标记后,window.onload事件会再次触发一次。当然事实并不是这样。换句话说,我不知道js文件什么时候能够加载完。而当你document.write的时候,所写入的代码会成为html解析的一部分,所以浏览器会等待js文件加载完成以后再执行下面的解析。需要注意的问题:如果在script标记A中使用document.write写了一个script标记B,那么,标记B会紧跟在标记A之后,也就是说是在标记A的外部。所以,在标记A中不能使用动态写入的标记B中的代码,需要在标记A之外重新写script标记来执行标记B中的代码。 最后附上muselite库里暂时新加的window.using代码,这段代码还没有想好怎么用,仅仅完成了文章开头所说的,动态添加的功能而已。 window.MUSELITE_DEFAULT_FOLDER = ‘Scripts’; (function(w, arr){ w._using = function(app){ if(!app || typeof app != ‘string’) return; var i = 0, len = arr.length; for(; i < len; i++) arr[i] === null ? document.write(app) : document.write(arr[i]); } w.using = function(){ if(arguments.length < 1) return; var i ...Read More

Hello World!

This is MK’s kitchen.

我对前端工程师的理解(回答某童鞋的提问)

首先,WEB前端开发,是个新职业,在几年前还没有呢。。 WEB前端开发主要的职业技能,是DIV+CSS,Javascript。 前端开发的主要工作是,把美工设置的图,还原为静态HTML文件,以及在前端交互的实现。 我不是高手,根据我目前了解的。从基本到提高,由以下几个阶段构成。 1、DIV+CSS阶段,需要了解样式在页面中产生的作用和效果。并对跨浏览器兼容有充分的认识。 在这一阶段,主要工作基本就是切图。。。如果你一点基础都没有,你可能要从HTML开始学起,知道标签的语义,然后试着看看样式表的选择器,找一本书看一看,然后就是多练习,做的多了,自然遇到问题更多,经验就会增加。 2、JS表现阶段。 需要了解Javascript脚本,了解事件模型等等。。 这一步,需要第一阶段作为基础。 在这一阶段,主要工作除了切图之外,你也可以用JS写一些效果了,比如标签的切换,菜单的显示隐藏。 3、JS进阶阶段。在这个时候,你应该会遇到前后台交互的问题。那么,你会使用ajax来解决问题。由于有第二阶段的基础,通过操作DOM,把后台数据通过不刷新网页的方式呈现到前端网页上。 在这个时候,你已经是一位“前端工程师”了。 4、交互设计,面向对象的JS。  到了这个时候,你已经会很有经验的对交互设计提出你的意见了,在提高用户体验应该有自己的理解。对脚本框架,也应该有所涉猎了。 总体就这么多,前端开发是一个很好的职业,因为做好的人不多,但是由于web2.0的到来,各网站对用户体验的要求越来越高了,需求会持续的增加。 大家都努力加油吧! PS:有的同学除了JS脚本之外,走向了另外的一些分支,例如flash脚本开发,还有例如silverLight等等,这些都是很好的。