Bai*_*ker 7 javascript html5 html5shiv
在最近的一个项目中,我使用了Alexander Farkas的HTML5 Shiv,我发现当缩小时脚本是2.274 KB.对于我来说,对于John Resig基本上在两行中演示的概念来说,这看起来相当大(我意识到这非常过于简单,因为John不包括对支持或所有新HTML5元素的检查).我挖到了html5shiv源代码.它是248 sloc,对于这么简单的任务来说,这似乎是很多不必要的代码.我只用了14行就实现了一个更简单的shiv:
(function(document) {
var div = document.createElement('div'),
elements = 'article|aside|audio|canvas|details|figure|figcaption|footer|header|hgroup|nav|output|progress|section|summary|video'.split('|'),
i = 0,
length = elements.length;
div.innerHTML = '<header></header>';
if(div.childNodes.length != 1) {
for(; i < length; i++) {
document.createElement(elements[i]);
}
}
})(document);
Run Code Online (Sandbox Code Playgroud)
缩小它只有~270字节(从Farkas Shiv的大小节省88%).当与适当的CSS结合使用时,它在IE 6,7和8中正常工作.
article,aside,audio,canvas,figure,figcaption,footer,header,hgroup,nav,output,progress,section,video{display:block;}
Run Code Online (Sandbox Code Playgroud)
似乎Farkas shiv的肉在创建元素和检查try/catch中的函数方面做了一些魔术.这种肉和馅料是否必要?我的解决方案是否足够,或者Farkas shiv是否考虑了我未考虑过的事情?
编辑
该脚本现在使用正确的声明创建自己的样式标记(并且仍然只有21行!):
(function(document) {
var div = document.createElement('div'),
elements = 'article,aside,audio,canvas,figure,figcaption,footer,header,hgroup,nav,output,progress,section,video',
elementArr = elements.split(','),
i = 0,
length = elementArr.length,
script, style;
div.innerHTML = '<header></header>';
if(div.childNodes.length != 1) {
for(; i < length; i++) {
document.createElement(elementArr[i]);
}
script = document.getElementsByTagName('script')[0];
style = document.createElement('style');
style.innerHTML = elements+'{display: none}';
script.parentNode.insertBefore(style, script)
}
})(document);
Run Code Online (Sandbox Code Playgroud)
您的代码和 html5_shiv 之间的主要区别在于您的版本仅迎合 IE在页面初始加载期间缺乏对 HTML5 元素的支持。
事实上,还有一些重要的问题需要处理,如果您在加载后使用 Javascript 修改页面内容,您将会遇到这些问题。
曾经,实际上有一个名为html5 inside shiv的辅助脚本,它解决了这些问题。但是,主 html_shiv 脚本的更新版本也包含了这些修复,因此不再需要辅助脚本。但这确实意味着主要脚本现在要大得多。
这说明了您所看到的代码量。
如果您的 HTML 是静态的,那么答案是否定的,您不需要所有额外的代码;你的版本没问题。(或者您可以访问 html5_shiv Github 页面并下载以前的版本;早期版本看起来更像您的代码)。
但如果您打算编写一个包含任何类型动态内容的网站,那么我们强烈建议您使用 html5_shiv 的完整当前版本。它解决的不仅仅是一个问题。
归档时间: |
|
查看次数: |
283 次 |
最近记录: |