转自:http://be-evil.org/showlog-31.html
今天在项目开发中遇到的比较郁闷的问题,特此记录:
程序代码思路大致如下,想动态的改变tr标签的innerHTML内容,但是IE却报"未知的运行时错误",让我百思不得其解.
<script>
document.getElementById('trone').innerHTML = '<td>haha</td>';
</script>
<tr id=‘trone’>
</tr>
在网上一段查找获得以下解法:
在Ajax里经常会通过innerHTML来改变界面,这个比使用DOM要简单一些。
比如:
element.innerHTML = "<b>something</b>";
不过,在IE中,有时候会出现"未知的运行时错误(unknown runtime error)",而在firefox里不会。
这主要是IE在对innerHTML进行写操作的时候会检查element是否具备做为这些内容中html对象容器的要求,比如如果你是在一个p里加入包含<li>的html代码,这是会出错的。所以如果你发现这些错误出现,尝试做两件事情:
1、检查你尝试加到innerHTML的html代码是否包含破损的html标签,如没有<ul></ul>包围的<li></li>.
2、把你的容器改成那些比较“包容”的标签,如<span></span>,<div></div>
特别注意的是<tbody>,<table>,<tr>标签里面加正确格式的<td>标签都有可能出错,所以应该避免使用这些标签作为容器,必要时可以用<td>作为容器,再嵌套一层表格。
跨浏览器的设置innerHTML方法
2006年11月06日 星期一 09:37 A.M.
innerTEXT与innerHTML的区别:
很多人都可能遇到过这种情况:设置 innerHTML 的时候,插入的 HTML 代码中包含脚本,但这些脚本却不生效,或者在 IE 上生效在其它浏览器上就不生效。原因很简单:不同浏览器对插入 innerHTML 中的脚本有不同的处理方法。经过实践,归纳如下:
对于IE,首先 script 标签必须带 defer 属性,其次在插入时刻,innerHTML 的所属节点必须在 DOM 树中;对于 Firefox 和 Opera,在插入时刻,innerHTML 的所属节点不可以在 DOM 树中。
根据上面结论,给出通用的设置 innerHTML 方法:
/*
* 描述:跨浏览器的设置 innerHTML 方法
* 允许插入的 HTML 代码中包含 script 和 style
* 作者:kenxu <ken@ajaxwing.com>
* 日期:2006-03-23
* 参数:
* el: 合法的 DOM 树中的节点
* htmlCode: 合法的 HTML 代码
* 经测试的浏览器:ie5+, firefox1.5+, opera8.5+
*/
var setInnerHTML = function (el, htmlCode) {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {
htmlCode = '<div style="display:none">for IE</div>' + htmlCode;
htmlCode = htmlCode.replace(/<script([^>]*)>/gi,
'<script$1 defer="true">');
el.innerHTML = htmlCode;
el.removeChild(el.firstChild);
}
else {
var el_next = el.nextSibling;
var el_parent = el.parentNode;
el_parent.removeChild(el);
el.innerHTML = htmlCode;
if (el_next) {
el_parent.insertBefore(el, el_next)
} else {
el_parent.appendChild(el);
}
}
}
还有某些情况,我们事先不清楚要插入到 innerHTML 的 HTML 代码包含什么,如果包含 document.write 语句,那么就会破坏整个页面。对于这种情况,可以通过重新定义 document.write 来避免。代码如下:
/*
* 描述:通过重定义 document.write 函数,避免在使用 setInnerHTML 时,
* 插入的 HTML 代码中包含 document.write ,导致原页面受到破坏的情况。
*/
document.write = function() {
var body = document.getElementsByTagName('body')[0];
for (var i = 0; i < arguments.length; i++) {
argument = arguments[i];
if (typeof argument == 'string') {
var el = body.appendChild(document.createElement('div'));
setInnerHTML(el, argument)
}
}
}
在这篇文章编写之前,已经有一个比较完善的解决方法《
让插入到 innerHTML 中的 script 跑起来
》。比较起来,《让》给出的方法考虑得更细致,但处理起来比较繁琐,效率不高。而这里给出的方法则更简单,并且充分利用了浏览器的特性。
分享到:
相关推荐
[removed] ”trone”> </tr> 在IE中,有时候会出现”未知的运行时错误(unknown runtime error)”,而在firefox里不会。 这主要是IE在对innerHTML进行写操作的时候会检查element是否具备做为这些内容中html对象容器的...
本文实例讲述了js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法。分享给大家供大家参考。具体分析如下: 问题描述: 网站中使用了一个js插件,设置innerHTML时,在IE8下报错“未知运行时错误”: ...
总结起来,解决CodeMirror2在IE7/IE8下出现的“未知运行时错误”的关键在于理解`innerHTML`在老版本IE中的限制,以及调整HTML结构以避免使用不支持此属性的元素。通过将`textarea`移出`<p>`元素并放入`<div>`中,...
6. **DOM操作**:IE9在处理DOM操作时可能存在一些非标准行为,如`innerHTML`的使用。`basic.js`可能会包含一些工作函数来处理这些问题。 7. **ES5方法**:一些ES5的新特性,如`Array.prototype.forEach()`、`Array....
在这段代码中,尝试通过设置`innerHTML`属性来修改`p`标签的内容,但在IE中直接插入`<CENTER>`标签会导致运行时错误。这是因为IE对某些特定的HTML标签有严格的限制。 4. **经典的“无法打开Internet站点”异常** ...
但在IE的兼容模式下,尝试更改`table`、`thead`、`tfoot`、`tbody`、`tr`、`col`、`colgroup`、`html`、`title`、`style`、`frameset`等元素的`innerHTML`时,会出现“未知的运行时错误”。这是因为这些元素的`...
而在IE6, 7, 8这些较旧版本的浏览器中,JavaScript引擎对DOM操作的错误检测更为严格,因此在尝试访问或修改`innerText`或`innerHTML`属性时,会导致“未知的运行时错误”。 为了解决这个问题,开发者应该首先检查并...
在挂马场景中,攻击者会利用目标网站的安全漏洞,在网页中插入一个不可见(宽度和高度设置为0)的`<iframe>`标签,并将其源链接指向恶意站点。用户访问目标网站时,恶意代码会在后台静默加载并执行,导致用户的电脑...
例如,如果有一系列的元素(如div1, div2, div3...),而这些元素的ID是未知的,我们可以使用for循环来生成这些ID,并用eval()来设置元素的innerHTML属性,如示例中的“document.getElementById("div"+loop)....
Ajax技术是一种在不重新加载整个页面的情况下,能够与服务器交换数据并更新部分网页的技术。它最早由Google在其产品如Google地图中使用,随着其便捷性和高效性,逐渐成为Web开发的标准做法之一。 在JavaScript中,...
在非IE浏览器中,我们不能直接用`innerHTML`或`cssText`属性,因为它们可能导致未知错误,比如在IE中那样抛出"unknow runtime error"。 为了确保在所有浏览器中都能正确地动态创建和应用CSS样式,开发者需要编写...
使用`try...catch...finally`处理可能出现的错误,`try`块包含可能出错的代码,`catch`块捕获错误,`finally`块无论是否发生错误都会执行。 12. 事件处理 JS可以监听用户的交互事件,如点击、提交表单等,通过`...
AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。其核心在于使用`XMLHttpRequest`对象进行后台数据交互。本文将深入探讨AJAX的基本...
本文主要讨论如何在Firefox浏览器中使用JavaScript和XSLT来处理XML文件,以及与IE浏览器的兼容性问题。 一、XSLTProcessor对象 在Firefox浏览器中,可以使用XSLTProcessor对象来执行XSLT转换。XSLTProcessor对象...
这些新元素包括, , , , , 等,它们在现代浏览器中能够很好地工作,但在IE的老版本中则被视为未知标签,从而导致样式失效或者无法正常布局。 HTML5 Shiv的工作原理是通过JavaScript动态创建这些HTML5元素,并赋予...
在这个例子中,攻击者可以在输入框中输入JavaScript代码,点击按钮后,这些代码将被插入到页面的`<div>`中并执行。 前端开发人员必须了解并掌握这些安全概念,以确保开发的Web应用能够有效防御各种安全攻击,保护...
在XML文档中,上述几种语句的语法都是错误的。因为: 1.所有的标记都必须要有一个相应的结束标记; 2.所有的XML标记都必须合理嵌套; 3.所有XML标记都区分大小写; 4.所有标记的属性必须用""括起来; 所以上列...