是否可以以编程方式捕获JavaScript SyntaxErrors?

我认为这不可行,但想将它扔给社区以证实我的怀疑.

假设您正在用另一种语言(例如Python,PHP或ASP)编写程序.该程序旨在构建另一个用JavaScript编写的程序.但是,不幸的是,第一个程序不能避免错误.因此,偶尔,构建JavaScript程序的程序会做一些时髦的事情,并在JavaScript源中输出语法错误.现在,一些用户去加载程序,并且实际上停止了运行,因为运行该程序的Web浏览器无法正确解析JavaScript.该用户可能不会很高兴.我不会.

这使我想到了问题.是否有可能编写一个错误处理程序来捕获此类语法问题,从而使应用程序正常运行?

这是一个例子:

    <html>
  <head>
   <script type="text/javascript" charset="utf-8">
    window.onerror = errorHandler;
    function errorHandler(a,b,c) {
     alert('horray!  No wait, Booo!');
    }
    vara jfs;
   </script>
  </head>
  <body>
   Can this be done?
  </body>
 </html>

要么

<html>
  <head>
   <script type="text/javascript" charset="utf-8">
    try {
     vara jfs;
    } catch  (e) {
     alert('horray!  No wait, Booo!');
    }
   </script>
  </head>
  <body>
   Can this be done?
  </body>
 </html>

解决方法:

通常,将分析一种编程语言,如果成功,则可能会编译为另一种形式,如果成功,则在硬件或vm上解释/执行.仅仅因为代码通过了一个阶段,并不意味着它是有效的代码.

您要问的是,在最后阶段中运行的代码是否可以知道在第一部分中遇到的问题并进行处理.

某些语言对其自身的解析和编译机制提供了各种挂钩.正如Cheeso所述,eval是Javascript调用此机制的方式.

与其将所有脚本包装在字符串中,不如将它们保留在javascript文件中,并使用以下javascript(或类似代码)将它们加载到您的主程序中,可能会更好.

 function load(file){
    var client = new XMLHttpRequest();
    client.open("GET", file, false);
    client.send(null);
    return client.responseText;
  }

  function include(file){
    try {
      eval(load(file));
    } catch (e) {
       alert("problem with file " + file);
    }
  }
上一篇:带有异步def的Python [无效语法]


下一篇:向python2.1的backport函数修饰符