- 浏览: 825234 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
这是一个非常隐秘也是非常强大的bug,我真不知微软的IE开发人员是怎么搞出来的。此bug的触发条件是,当页面存在一个自闭合的base节点,它就会把其“下面”所有的元素都拷到它内部。这里的下面非childNodes,children所能描述,它连body节点都能编入其中。
<!doctype html> |
< html >
|
< head >
|
< meta charset = "utf-8" />
|
< meta content = "IE=8" http-equiv = "X-UA-Compatible" />
|
< meta name = "keywords" content = "IE6 base bug" />
|
< base href = 'http://www.cnblogs.com/rubylouvre/' />
|
< script type = "text/javascript" id = "test" >
|
window.onload = function(){
|
var meta = document.createElement("meta");
|
meta.name = "description";
|
meta.content = "IE6 base bug by 司徒正美"
|
var head = document.documentElement.firstChild;
|
head.appendChild(meta);
|
alert("meta.parentNode : "+meta.parentNode.tagName);
|
var base = document.getElementsByTagName("base")[0];
|
alert("base.childNodes.length : "+base.childNodes.length)
|
alert("body.parentNode : "+document.body.parentNode.tagName)
|
var script = document.getElementById("test");
|
alert("script.parentNode : "+script.parentNode.tagName)
|
}
|
</ script >
|
< title >IE 复制节点 bug</ title >
|
</ head >
|
< body >
|
< h1 >请在IE6下运行</ h1 >
|
< script type = 'text/javascript'
|
</ body >
|
|
</ html >
|
运行代码
运行代码下,我们发现完全乱套了,原本父节点为head的meta元素(动态生成)与父节点为html的body元素(原来就存在),它们的父节点都变成base节点。下面是用firebug lite截到的图:
jQuery在使用globalEval方法动态解析脚本时,就遇到这个问题,它取巧地把动态生成的script节点插入到base节点之前。
globalEval: function ( data ) {
|
if ( data && rnotwhite.test(data) ) {
|
var head = document.getElementsByTagName( "head" )[0] || document.documentElement,
|
script = document.createElement( "script" );
|
script.type = "text/javascript" ;
|
if ( jQuery.support.scriptEval ) {
|
script.appendChild( document.createTextNode( data ) );
|
} else {
|
script.text = data;
|
}
|
head.insertBefore( script, head.firstChild );
|
head.removeChild( script );
|
}
|
}, |
但还是不妥当,因为始终留着个陷阱给人踩。想了想,base标签无碍乎只有两个属性,用于对页面上所有的URL进行统一设置,如img.src,form.action,a.href等等。通常只有一个就够了,如果它只存在于body中,不管,如果存在于head就会为害人间了,我们需要将它强制添加一个闭合标签。即,将它由
< base href = 'http://www.cnblogs.com/rubylouvre/' />
|
转换为
< base href = 'http://www.cnblogs.com/rubylouvre/' ></ base >
|
虽然IE6解析base的半闭合形式出错,但它不会不济到解析一个全新的节点出错吧,它理应会把新节点转换为它不会出错的形式,换言之,是第二种形式。创建新节点的方法有许多种,但我们很需要原节点的属性,恰好IE的cloneNode什么也能复制。之后就是插入节点的问题了,我们使用它的一个私有实现replaceNode,不用知晓其父节点,它也将用于区分IE与非IE。
下面是我的fixbug程序:
//by 司徒正美 |
//此bug在IE7中修复,详见: |
if (document.replaceNode && !window.XMLHttpRequest){
|
var head = document.getElementsByTagName( "head" )[0],
|
base = head.getElementsByTagName( "base" )[0],
|
headFrag = document.createDocumentFragment(),
|
bodyFrag = headFrag.cloneNode(),el;
|
if (base && base.childNodes.length){
|
for (; el =base.childNodes[0];) {
|
if (el.tagName === "BODY" ){
|
bodyFrag.appendChild(el);
|
break ;
|
} else {
|
headFrag.appendChild(el)
|
}
|
}
|
base.replaceNode(base.cloneNode())
|
head.appendChild(headFrag);
|
document.documentElement.appendChild(bodyFrag)
|
}
|
}
|
运行代码
搞定!不过,我的globalEval函数用不着这个,直接用execScript一了百了,连script标签也不用插入。
发表评论
-
javascript面向对象之一 类
2011-06-06 16:46 956javascript中的类多数是用 ... -
javascript面向对象之二 命名空间
2011-06-06 16:24 1195javascript中本没有命名空间的概念,但是要体现面向对象 ... -
网页特效代码
2011-06-01 16:38 10531. Flip! 一个 jQuery 插件 http://l ... -
js 操作select 大全
2010-11-04 13:49 7001判断select选项中 是否存在Value="pa ... -
Dialog 超酷js弹出层 完美兼容所有浏览器 华丽呈现超强功能
2010-11-03 13:05 1319http://www.iteye.com/topic/4800 ... -
IE6对display:table-row不支持
2010-11-02 19:34 1570http://topic.csdn.net/u/2010070 ... -
javascript中字符串转化为json对象
2010-07-30 09:11 1187http://www.json.org/js.html To ... -
汇总让IE6崩溃的几种方法
2010-07-20 16:25 1107经常遇到莫名其妙让IE6崩溃的事情。今天看到了一篇好文章,数字 ... -
JS添加事件处理函数
2010-07-08 23:41 1057作为一种事件驱动的编 ... -
js压缩工具
2010-07-04 23:50 1762javascriptcompressor.com ( ... -
Javascript 中 ShowModalDialog 的使用方法
2010-06-21 16:13 1397ShowModalDialog函数的功能 ... -
xtree的基本应用---入门级
2010-06-21 16:08 1191由于公司要求做一棵关于公司员工选择的JS控件树,以前我们一直使 ... -
javascript实现上传图片前的预览效果
2010-06-16 20:35 1357<script>function yulan(){ ... -
重写window.confirm函数
2010-06-12 11:06 2277重写window.confirm函数为了让它能够默认选择取消按 ... -
改善window的alert提示信息框样式
2010-06-12 11:05 1424<input type="button&quo ... -
jsgraphics图形库
2010-05-10 22:58 1588http://www.walterzorn.com/jsgra ... -
JavaScript图形库jsGraphics
2010-05-10 22:57 2446JavaScript图形库Raphaël < JavaS ... -
千一JS控件
2010-05-10 22:31 809千一JS控件--滑块条 千一JS控件--进度条 千一JS控 ... -
JavaScript 生成曲线图
2010-05-10 22:28 1183引用方法 new gov.Graphic(par1,par2 ... -
腾讯检测 IP 省市的接口
2010-05-10 22:26 1421利用 JavaScript 调用。 <script ...
相关推荐
javascript中base标签的使用
struts 中的base标签中的各个属性。选择在哪个窗口打开连接。
base(6).apk
6_base.apk.1
网上下载的Base64编码加密.htm页面,对base64编码解码支持不好,主要是对中文无法正确执行。 换了解码函数后,对中文英文编码解码都支持了,测试通过。 另外再增加了将base64编码中的回车换行符去掉的功能,这样对...
base标签除了全局的属性之外,还有 href、target两个属性。 没有内容值。 interface HTMLBaseElement : HTMLElement { attribute DOMString href; attribute DOMString target; }; base标签用于定义HTML文档中...
本文实例讲述了JavaScript获得页面base标签中url的方法。分享给大家供大家参考。具体如下: 如果网页中定义了base标签,我们可以通过js代码获得base的url地址 <!DOCTYPE html> <html> <head> <...
点击base64图放大预览,可以基于uniapp框架图片预览 点击base64图放大预览,可以基于uniapp框架图片预览
6_base.apk
登录敏感数据传输为明文传输,数据加密传输仅在获取短信验证码时进行,但是在登录过程中未进行加密传输 用于前台页面传输数据到后台时,对敏感数据加密传输,后台在对敏感数据解密处理 本代码块中有base64加密两种...
CentOS6 yum 源:centos6_base.repo
HTML中的base标签 中文WORD版
jsp中的base标签与meta标签对于一些新手朋友们来说还是有些陌生,下文整理了一些,不会的朋友可以参考下
PCI Express® Base Specification Revision 3.0 标签版,总内容供860页
base16,base32,base64C语言实现代码,高效率运行,非常实用。
VB6实现图片和BASE64之间的转换,巧用XML,通用性好,可以用于将图片远程上传服务器,保存数据库,或才接收服务器图片数据后,转换成图片本地显示。