【问题标题】:Eval User JS Syntax On Button Click按钮单击时评估用户 JS 语法
【发布时间】:2018-01-08 00:29:49
【问题描述】:

我需要一些帮助来弄清楚为什么这不起作用。

我要做的是使用“eval()”评估用户输入的 JS 语法,并在 JS 代码中有错误时向用户发出警报。

当用户单击“Evaluate”按钮时,JQuery 事件被触发并向用户发出警报,但问题是当他们再次单击“Evaluate”时没有错误。

HTML:

<label>Example Editor (Ace editor actually used)</label>
<textarea id="editor" rows="5" class="form-control"></textarea>
<button id="evaluate" class="btn btn-success">Evaluate JS</button>
<button id="set_valid" class="btn btn-warning">Set Valid JS</button>
<button id="set_invalid" class="btn btn-danger">Set Invalid JS</button>

JS:

$(function () {

        var editor = $("#editor");

        $("#evaluate").on("click", function () {
            //Evaluate JS
            try {
                eval(editor.val());
            } catch (e) {
                alert("There is an error in your JS syntax.");
                alert("Click Evaluate JS button again.. does not catch error");
            }
        });

        //Just to set valid js value
        $("#set_valid").on("click", function () {
            editor.val("$(function(){ \ralert('Valid JS Evaluated.');\r});");
        });

        //Just to set invalid js value
        $("#set_invalid").on("click", function () {
            editor.val("$(function(){\r undeclaredVariable \r\r\r});");
        });
    });

我这里设置了一个fiddle来更详细的解释:

https://jsfiddle.net/4vg3d9ka/2/

希望有人可以向我解释一下:-)

PS:对于 eval 安全问题,这并不重要,因为它是我正在构建的 NW.js 桌面应用程序..

谢谢 卡尔

【问题讨论】:

  • 适用于我的 Chrome for Linux。无效的 JS 总是咳嗽,但是如果我更改为有效,它仍然会进入 catch 块...

标签: javascript jquery html try-catch eval


【解决方案1】:

之所以只触发一次是因为jQuery语法

$(function(){})

表示当Document 准备好时触发该函数,它只会触发一次。所以下次当你eval 那个代码时,Document 已经准备好了,它不会触发回调。

如果你让你的无效 js 变成像 x=y 这样的东西,它每次都会触发。

【讨论】:

  • 啊,不知道为什么我没听懂!谢谢!
  • 如果用户以语法形式输入 $(function(){}) 函数调用,我如何确保它始终被调用?
  • 不认为这是可能的。 ready 事件在被调用后解除绑定。您可能会解析出函数体并只评估它而不是整个用户输入。您也可以在发生错误时重新加载页面,但您需要先保存用户输入。无论哪种方式,这将是一项黑客工作
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多