【问题标题】:How do I prevent this javascript from being evaluated?如何防止此 javascript 被评估?
【发布时间】:2020-04-06 15:15:20
【问题描述】:

我正在尝试构建一个基于 Web 的代码编辑器,并将 javascript 加载到 textarea 值中,我很偶然地发现该页面正在评估代码。

var url = 'local.js';
var timestamp = new Date().getUTCMilliseconds();
$.get(url, {r:timestamp}, function(data) {
    $("#scriptview").val(data);
    $("#editor").slideDown();
}); 

如何防止 GET 请求评估代码?我直接从本地文件获取源代码。

更新: 更改代码以添加 dataType 解决了这个问题。我无法正确使用 $.get 语法糖,所以我使用的是 $.ajax

var url = 'local.js';
var timestamp = new Date().getUTCMilliseconds();
$.ajax({url:url, data: {r:timestamp}, success: function(data) {
       $("#scriptview").val(data);
       $("#editor").slideDown();
       return false;
}, dataType: "text"});

我仍然不明白为什么被调用文件中的代码被执行,我没有在脚本标签或任何内容中附加到正文。

【问题讨论】:

  • @freedomn-m 让它成为答案
  • 等一下,$.get() 究竟会如何隐式评估 JavaScript?
  • 我和@Pointy 在一起我不认为这段代码是罪魁祸首。您正在使用正在评估它的 textarea 值执行其他操作。您是否将其放入 .html() 中?
  • 添加alert("local.js") 作为页面的第一行。您可能无意中加载了它(例如通过捆绑包)

标签: javascript jquery get execution evaluation


【解决方案1】:

jQuery.ajax 接受 dataType 参数。明确设置会:

  • 设置Accept标头
  • 忽略响应的Content-Type,按照你说的格式解析数据。

如果不设置,jQuery 会从响应的Content-Type 推断数据类型。这通常是件好事!

在这种情况下,您正在请求 JavaScript(它将带有 Content-Type: text/javascript 响应标头),但不希望它被视为 JavaScript。 jQuery 确实支持 "script" 作为数据类型!

设置dataType(到"text")以覆盖默认处理。

(感谢@freedomn-m 发现问题)

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多