IE 8 HTML Parsing Error:Unable to modify the parent container element before the child element is...

本文详细阐述了在使用IE浏览器时,因DOM操作发生在DOM树加载完成之前导致的HTML解析错误,并提供了两种解决方案:通过document.readyState状态判断或延迟执行JS代码,确保在DOM完全加载后进行DOM操作。

一、

又长见识了

IE8报下面错误,而且是我的机器不报,同事的机器报,试了4台,两个报,两个不报,IE版本都一样,没想明白
解决:

1、查看是否有未关闭的html标签,比如<table>而没有</table> (我就是这个原因)
2、是否在页面未加载完前js代码操作了body里的元素,将相关js代码移到</body>后面

网页错误详细信息

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
时间戳: Wed, 14 Apr 2010 08:33:56 UTC


消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
行: 0
字符: 0
代码: 0
URI: 

http://support.microsoft.com/kb/927917

二、

它的发生,是因为某些DOM操作发生在DOM树加载完成之前,比如appendChild

就像下面的代码:

<html>
<head>
</head>
<body>
<div>
<script type="text/javascript">
    alert(document.readyState);
    var oDiv = document.createElement("DIV");
    oDiv.innerHTML = 'test odiv test odiv';
    document.body.appendChild(oDiv);
</script>
</div>
</body>
</html>

当解析到DIV时就开始在BODY上appendChild,而这个时候BODY是还没有完全就绪的(It is not fully loaded),文档结构仍在loading和interactive状态之间,于是,便会得到上述错误。当然,该错误目前已确切知道的会存在于IE6和 IE7两个版本中(低于IE6的未进行测试),在IE8中将会得到一个HTML解析错误:HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)

1.要解决这个问题,可以进行document.readyState状态判断,当它为complete时再进行相应的操作,或者给script标签加上defer属性(该属性在IE8中已不获支持)。
2.或者

js中加入了 setTimeout("XXXX()",1000);,使其获得足够的加载时间后执行目标(XXXX)的function,于是问题得到解决

 

来源:http://blog.youkuaiyun.com/kunga0814/archive/2009/12/02/4926171.aspx


 

<think>我们遇到的问题是:在headerAnim.js文件中,出现了'Parsing error: The keyword 'const' is reserved'错误。根据引用[1]和引用[2],这个错误是因为ESLint默认使用ES5语法检查,而ES6语法(如const)不被识别。因此,我们需要在ESLint配置文件中指定使用ES6或更高的版本。 解决方案: 1. 在项目根目录下找到(或创建)`.eslintrc.js`文件。 2. 在该文件中配置`parserOptions`,指定`ecmaVersion`为6(或更高版本,如2015、2016等)以及`sourceType`为`"module"`。 具体步骤如下: 步骤1:打开或创建项目根目录下的`.eslintrc.js`文件。 步骤2:在配置对象中添加`parserOptions`属性,如下所示: ```javascript module.exports = { // ... 其他配置 parserOptions: { ecmaVersion: 6, // 或使用数字6,也可以使用年份如2015 sourceType: "module" } }; ``` 步骤3:保存文件,然后重新运行ESLint检查(或者如果是在开发环境中,保存后编辑器会自动应用新的配置)。 注意:有时候,你可能已经配置了`parserOptions`,但是`ecmaVersion`设置过低,比如5。那么将其改为6或更高即可。 另外,引用[2]中还提到了配置`parser`为`'babel-eslint'`,这是因为如果你使用了Babel转换器,可能需要使用babel-eslint作为解析器。如果你在项目中使用了Babel,那么可以这样配置: ```javascript module.exports = { parser: 'babel-eslint', // 先安装babel-eslint:npm install babel-eslint --save-dev parserOptions: { ecmaVersion: 6, sourceType: "module" }, // ... 其他配置 }; ``` 总结:我们遇到这个错误是因为ESLint的解析器版本设置过低,无法识别ES6的关键字(如const、let)。通过调整ESLint配置文件中的`parserOptions.ecmaVersion`即可解决。 如果问题仍然存在,请检查你的ESLint版本是否支持ES6,以及配置文件是否正确加载。 下面是一个完整的`.eslintrc.js`配置示例(不包含其他规则): ```javascript module.exports = { env: { browser: true, node: true, }, parserOptions: { ecmaVersion: 6, // 或者2015 sourceType: "module", }, // 其他规则和插件配置 }; ``` 请根据你的项目实际情况调整。 注意:如果项目中没有安装ESLint,需要先安装: ``` npm install eslint --save-dev ``` 然后,如果你使用了babel-eslint,还需要安装: ``` npm install babel-eslint --save-dev ``` 最后,确保你的代码中没有其他语法错误。 这样修改后,headerAnim.js文件中的const关键字应该就不会再报错了。 如果问题还未解决,请检查编辑器中的ESLint插件是否使用了正确的配置文件路径。 相关问题: 1. 如何解决ESLint中出现的其他关键字错误(如import)? 2. 如何在Vue项目中配置ESLint以支持ES6? 3. 如何在WebStorm中配置ESLint使用自定义的配置文件? 4. 如何升级ESLint以支持最新的ECMAScript版本? 5. 在项目中同时使用ESLint和Prettier时需要注意什么? </think>### 解决 `headerAnim.js` 报错:`Parsing error: The keyword 'const' is reserved` 这个错误是因为 ESLint 配置不支持 ES6 语法(如 `const` 声明),以下是详细解决步骤: #### 步骤 1:修改 ESLint 配置文件 (`.eslintrc.js`) 在项目根目录创建/修改 `.eslintrc.js` 文件,添加 `parserOptions` 配置: ```javascript module.exports = { // 新增的关键配置 parserOptions: { ecmaVersion: 6, // 启用 ES6 语法支持 sourceType: "module", // 允许使用模块化语法 ecmaFeatures: { jsx: true // 若项目含 JSX 需要开启 } }, // 其他既有配置... env: { browser: true, // 启用浏览器全局变量 node: true // 启用 Node.js 全局变量 }, rules: { // 自定义规则... } } ``` #### 步骤 2:安装 Babel 解析器(可选) 如果仍报错,可能需要更高级的解析器: ```bash npm install @babel/eslint-parser --save-dev ``` 然后在配置中添加: ```javascript module.exports = { parser: "@babel/eslint-parser", // 替换默认解析器 parserOptions: { requireConfigFile: false, // 不使用独立 Babel 配置 ecmaVersion: 2021, // 支持最新 ECMAScript sourceType: "module" } // ...其他配置 } ``` #### 步骤 3:验证解决方案 检查 `headerAnim.js` 文件头部是否包含严格模式: ```javascript // 确保文件顶部没有严格模式声明(可能冲突) // "use strict"; // 删除此行 ``` #### 配置说明表 | 配置项 | 值 | 作用 | |--------|----|------| | `ecmaVersion` | 6+ | 指定支持的 JS 版本 | | `sourceType` | `"module"` | 允许使用 `import/export` | | `env.browser` | `true` | 启用 `window` 等浏览器变量 | | `parser` | `@babel/eslint-parser` | 支持实验性 JS 语法 | > **原理说明**:ESLint 默认使用 ES5 解析器,而 `const` 是 ES6 关键字。通过 `ecmaVersion:6` 显式声明环境支持 ES6+ 语法即可解决[^1][^2]。 #### 调试技巧 1. 在 `headerAnim.js` 顶部添加临时注释: ```javascript /* eslint-disable */ // 临时禁用 ESLint 检查 ``` 2. 运行检查命令: ```bash npx eslint headerAnim.js --fix ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值