javascript动态加载js脚本

function require(url, options){
var head, node, isOpera;
isOpera = typeof opera !== ‘undefined’ && opera.toString() === ‘[object Opera]’;
options.success = options.success || function(){};
options.error = options.error || function(){};
options.type = options.type || ‘text/javascript’;
options.charset = options.charset || ‘utf-8’;
options.async = options.async || true;

head = document.getElementsByTagName(“head”)[0];
node = document.createElement(/\/javascript/i.test(options.type) ? ‘script’ : ‘style’);
node.type = options.type;
node.charset = options.charset;
node.async = options.async;
node.src = url;
if (node.attachEvent &&
!(node.attachEvent.toString && node.attachEvent.toString().indexOf(‘[native code’) < 0) && !isOpera){ node.attachEvent('onreadystatechange', function(){ if(!node.readyState || node.readyState == "loaded" || node.readyState == "complete"){ options.success(); } }); }else{ node.addEventListener('load', options.success, false); node.addEventListener('error', options.error, false); } head.appendChild(node); } [/javascript] 狗日的IE不支持加载失败检测! 例子: [javascript] require('http://code.jquery.com/jquery-1.7.3.min.js', { success:function(){ alert('jquery loaded!'); }, error:function(){ alert('jquery load fail!'); } }); [/javascript]

preg_match正则匹配的字符串长度问题

项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来。
后来发现“pcre.backtrack_limit ”的值默认只设了100000。
解决办法:ini_set(‘pcre.backtrack_limit’, 999999999);
注:这个参数在php 5.2.0版本之后可用。
另外说说关于:pcre.recursion_limit
pcre.recursion_limit是PCRE的递归限制,这个项如果设很大的值,会消耗所有进程的可用堆栈,最后导致PHP崩溃。
也可以通过修改配置来限制:ini_set(‘pcre.recursion_limit’, 99999);
实际项目应用中,最好也对内存进行限定设置:ini_set(‘memory_limit’, ’64M’); , 这样就比较稳妥妥嘎。

javascript控制台console用法详解

console.log(object[, object, …])
在控制台输出一条消息。如果有多个参数,输出时会用空格隔开这些参数。
第一个参数可以是一个包含格式化占位符输出的字符串,例如:

console.log("The %s jumped over %d tall buildings", animal, count);

上面的例子可以用下面的无格式化占位符输出的代码替换:

console.log("The", animal, "jumped over", count, "tall buildings");

并且,这两种方式是可以组合使用的。如果使用了格式化占位符,而提供的参数的个数多于占位符的个数,那么,多余的参数会以空格分隔的方式附加在字符串后面,就像:

console.log("I am %s and I have:", myName, thing1, thing2, thing3);

如果参数是一个Javascript对象,那么在控制台输出的就不是静态文字,而是一个可交互的超链接,点击超链接可以查看该对象的HTML, CSS, Script, DOM窗口,可用格式化字符串%o代替Javascript对象。

console.log("Body tag is %o", document.body);

格式化字符串列表:
格式化字符串 类型
%s 字符串
%d, %i 整型(暂不支持数字型)
%f 浮点型 (暂不支持数字型)
%o 链接对象
console.debug(object[, object, …])
在控制台输出一条消息,包含一个指向代码调用位置的超链接。假如是直接在控制台输入该命令,就不会出现超链接(和console.log()一样)。
console.info(object[, object, …])
在控制台输出一条带有“信息”图标的消息和一个指向代码调用位置的超链接。
console.warn(object[, object, …])
在控制台输出一条带有“警告”图标的消息和一个指向代码调用位置的超链接。
console.error(object[, object, …])
在控制台输出一条带有“错误”图标的消息和一个指向代码调用位置的超链接。
console.assert(expression[, object, …])
测试表达式expression是否为真。如果不是真,会在控制台写一条消息并抛出异常
console.dir(object)
以列表形式输出一个对象的所有属性,有点和你查看DOM窗口相类似。
console.dirxml(node)
输出一个HTML或者XML元素的XML源代码。和你在HTML窗口看到的相似。
console.trace()
Prints an interactive stack trace of JavaScript execution at the point where it is called.
The stack trace details the functions on the stack, as well as the values that were passed as arguments to each function. You can click each function to take you to its source in the Script tab, and click each argument value to inspect it in the DOM or HTML tabs.
console.group(object[, object, …])
输出一条消息,并打开一个嵌套块,块中的内容都会缩进。调用console.groupEnd()关闭块。该命令可以嵌套使用。
console.groupEnd()
关闭最近一个由console.group打开的块。
console.time(name)
创建一个名字为name的计时器,调用console.timeEnd(name)停止计时器并输出所耗时间(毫秒)。
console.timeEnd(name)
停止同名的计时器并输出所耗时间(毫秒)。
console.profile([title])
打开Javascript性能测试开关。可选参数title会在打印性能测试报告时在报告的开头输出。
console.profileEnd()
关闭Javascript性能测试开关并输出报告。
console.count([title])
Writes the number of times that the line of code where count was called was executed. The optional argument title will print a message in addition to the number of the count.

[转]提升用户体验:HTML5 拖放文件上传

话说,还是有不少项目里提供让用户上传东西的。小到一个 wordpress 博客,大到一个文件存储网站。为了更好的用户体验。来学习两个新知识吧。HTML5 文件访问(File Access: FileReader)和拖放(Drag and Drop)。或许下个项目就能用上了。

一、起因
今天看到 twitter 上有人在分享 Min.us 这个网站。说是只要把图片进去,就可以分享。是的,它确实是这样。体验了一翻,无论从界面,还操作的方便性上说,这体验还真是很赞的。 继续阅读[转]提升用户体验:HTML5 拖放文件上传

JS中的instanceof和typeof

对于instanceof和typeof,以前偶尔的用到过,特别是typeof用到的相对更多一些,今日研究ext源码,很多地方都用到了instanceof,突然觉得他们两个有些相似但也应该有他们区别,网上看了一些文章,对它们之间的关系有了一定的了解。

instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。
typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用typeof来获取一个变量是否存在,如if(typeof a!=”undefined”){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。 继续阅读JS中的instanceof和typeof

jQuery1.9及2.0问答集锦

似乎很多人都最新一篇帖子的内容有着疑问和误解,那么我们就来整理一个短小的FAQ来回复那里出现的一些评论吧。
为什么jQuery核心团队不再支持旧版本的IE了(IE6/7/8)
我们没有不支持!明年发布的jQuery 1.9将继续支持旧版本的IE。即使在jQuery 2.0发布以后,jQuery团队也会继续支持和维护1.9版本的。
你们为什么强迫我在包含jQuer库的时候使用条件式注释呢?
我们没有强迫人们这么做!你完全可以仅使用jQuery 1.9,它可以用在我们支持的一切浏览器上,包括从IE6一直到最新版本的Chrome、Safari、Opera和Internet Explorer。
等jQuery 2.1版发布,并增加了一些API的话,会怎么样呢?jQuery 1.9还能与时俱进吗?
我们可以借你的水晶球看看未来吗?jQuery2.1不太可能在2014年以前发布,所以在2012年年中就谈论jQuery2.1长成什么样子挺难的。我们的总体方针是保持1.x和2.x的产品线同步更新,并通过插件来增加功能,具体情况可参见上周的主题演讲。 继续阅读jQuery1.9及2.0问答集锦