【问题标题】:Check syntax of JavaScript(jQuery) code before running jQuery.globalEval() or eval()在运行 jQuery.globalEval() 或 eval() 之前检查 JavaScript(jQuery) 代码的语法
【发布时间】:2012-02-11 08:25:18
【问题描述】:

继续话题:jQuery .globalEval() function

我使用 jQuery.globalEval(varwithJScode);

现在,当 varwithJScode 中的代码包含语法或其他错误时,问题就开始了 - 整个脚本停止了。

jsFiddle不支持jQuery.globalEval(),但是我用eval()代替模拟。

http://jsfiddle.net/55FfW/ 尝试将 var codeforeval 更改为一些错误的 javascript 代码,下一个命令将失败。

有没有办法避免其他 JS 代码在出错时停止和/或有没有办法在 eval 之前检查语法?

试过用这个:

try {
   jQuery.globalEval(jscode);
} catch (e) {
   if (e instanceof SyntaxError) {
      alert('JS error!');
   }
}

不适合我!

【问题讨论】:

  • jsfiddle 支持 jQuery,你只需要选择左边的 jquery 库...
  • @DidierGhys:你认为我为什么没有这样做?
  • jsfiddle 让我使用.globalEval() 没有问题,当我updated your fiddle 或尝试this fiddle 从您链接到的另一个问题的接受答案中。这个也可以使用 try/catch:jsfiddle.net/nnnnnn/55FfW/3
  • @nnnnnn:很有趣。我在 jsfiddle 上尝试了 globalEval() 很多次,直到我将其更改为 eval() 才起作用。而且我永远不会忘记选择 jQuery 框架。解决方案实际上是从我的代码中删除 (instanceof SyntaxError) 并仅保留 (e)。谢谢!
  • 我创建了一个new fiddle,并且无法以任何方式重现结果。

标签: javascript jquery


【解决方案1】:
            try {
                jQuery.globalEval(data.js);
            } catch(e) {
                console.log(e);
            }

【讨论】:

  • 请注意,如果您有一个 window.onerror 处理程序,如果在此 eval 中遇到错误,它将被调用。您可以临时将 null 分配给 window.onerror 以避免这种情况(之后恢复 window.onerror)。当然,应尽可能避免以任何形式使用 eval。
【解决方案2】:

你不需要一个沉重的 jQuery 来做这么简单的事情。

只需将eval 分配给一个变量,然后调用它。

    try{
         var globalEval = eval;
         globalEval(jscode);   //execute in global scope
    } catch(e) {
         alert(e);
    }

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多