新浪UED

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

by lixin / 前端开发,博客 / 2011-09-22
各浏览器对 window.execScript 方法的支持不同

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

注:本文所指的Chrome 版本是7.0.552.0 dev,最新版本已经已经不支持该方法

造成的影响

使用 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 JScript JavaScript eval window 全局

文章评论

  1. 将夜 说:

    博主这篇文章写的很不错,观点很认同啊,以后会经常来看看。

  2. 博主这篇文章写的很不错,观点很认同啊,以后会经常来看看。

  3. 濮阳seo 说:

    看不懂,很深奥,什么时候我也能够达到这样的技术多好啊

  4. Josey 说:

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

  5. 智能时代 说:

    支持彩虹~~~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

* 验证图片 刷新验证码

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>