打印

BX9055: 各浏览器对 window.execScript 方法的支持不同

作者:段立新 钱宝坤

标准参考

无。

问题描述

仅 IE 和 Chrome 支持 window.execScript 方法,其他浏览器不支持。IE 和 Chrome 对于此方法中语言类型参数的支持也存在差异。

造成的影响

使用 window.execScript 方法执行一段脚本代码字符串时,在 IE Chrome 浏览器以外的浏览器中可能无法执行,从而造成脚本错误。

受影响的浏览器

所有浏览器  

问题分析

根据 MSDN 中描述,window.execScript 方法会根据提供的脚本语言执行一段脚本代码。window.execScript 方法有两个参数,第一个参数指定被执行的脚本代码段,第二个参数指定脚本代码语言类别 (缺省值为 JScript)。
execScript 方法执行后的代码位于全局作用域下。

更多详细内容参见:execScript Method

分析以下代码,看 window.execScript 方法在各浏览器的支持情况:

<!DOCTYPE html>
<html>
<head>
<style>
  * { margin:0; padding:0; font:18px 'Trebuchet MS'; }
  table { border-collapse:collapse; }
  table td, table th { border:1px solid black; }
  th { background:#ddd; }
</style>
</head>
<body>
window.execScript()
<table cellspacing="0" cellpadding="0">
<script>
  var a, lang = ['JavaScript', 'JavaScript1.1', 'JavaScript1.2', 'JavaScript1.3', 'JavaScript1.4', 'JScript', 'VBS', 'VBScript', 'abcJavaScriptdef', 'Java-Script'];
  for (var i in lang) {
    try {
      a = undefined;
      window.execScript('a = 1', lang[i]);
    } catch(ex) {
      a = ex.message;
    }
    document.write('<tr><th>' + lang[i] + '</th><td>' + a + '</td></tr>');
  }
</script>
</table>
</body>
</html>

各浏览器执行结果如下:

脚本语言 IE6 IE7 IE8 Chrome Firefox Safari Opera
JavaScript 支持 支持 不支持 execScript
JavaScript1.1 支持 支持 不支持 execScript
JavaScript1.2 支持 支持 不支持 execScript
JavaScript1.3 支持 支持 不支持 execScript
JavaScript1.4 不支持此语言类型 支持 不支持 execScript
JScript 支持 不支持此语言类型 不支持 execScript
VBS 支持 不支持此语言类型 不支持 execScript
VBScript 支持 不支持此语言类型 不支持 execScript
abcJavaScriptdef 不支持此语言类型 支持 不支持 execScript
Java-Script 不支持此语言类型 不支持此语言类型 不支持 execScript

可见,

  • IE6 IE7 IE8 中,支持脚本语言类型为 JavaScriptJavaScript1.1JavaScript1.2JavaScript1.3JScriptVBSVBScriptwindow.execScript 方法。
  • Chrome 中,浏览器判断脚本语言类型参数中是否包含有完整的 javascript 字符串,为真时支持 window.execScript 方法。
  • Firefox Safari Opera 中,浏览器不支持 window.execScript 方法。

注: 脚本语言类型参数不区分大小写。

解决方案

window.execScript 方法不是所有浏览器都支持,需谨慎使用。若需要在其他不支持 window.execScript 方法的浏览器中达到类似的效果,可以使用 window.eval 方法:

<script type="text/javascript">
  var jsCode = "var a = 1;";
  if (window.execScript) {
    window.execScript(jsCode, "JavaScript");
  } else {
    window.eval(jsCode);
  }
</script>

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6.10
Chrome 7.0.552.0 dev
Safari 5.0.2
Opera 10.63
测试页面: execScript_JavaScript.html
本文更新时间: 2010-10-26

关键字

execScript JScript JavaScript eval window 全局