【问题标题】:How to load script content without execution?如何在不执行的情况下加载脚本内容?
【发布时间】:2014-09-28 12:32:36
【问题描述】:

我有一个字符串形式的脚本路径:

var path = 'some_script.js';

它可以是远程路径,相对的或绝对的,来自相同或不同的来源:

var path = 'http://path.to/some/another_script.js';

我正在尝试找到一种方法来加载具有给定 path 的脚本而不执行并将其内容作为字符串获取。

我试图创建一个类型无效的script,以便稍后使用一些 DOM 函数获取其内容:

var s = document.createElement('script');
s.src = path;
s.type = "text/broken";
//    s.type = "text/javascript";

document.getElementsByTagName('head')[0].appendChild(s);

但在这种情况下,甚至没有加载脚本(至少在 Chromium 中)。如果我将它的类型更改为"text/javascript",脚本会被加载,但会立即执行。

有什么方法可以在不执行的情况下加载脚本并获取其内容?

【问题讨论】:

  • 所以发出 Ajax 请求并获取文件。
  • 谢谢,会尝试这样做..

标签: javascript


【解决方案1】:

您正在寻找一个普通的 AJAX 调用,它是这样的:

function reqListener () {
    console.log(this.responseText);
}
var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("get", path, true);
oReq.send();

如果您使用的是 JQuery,那么您可以这样做:

$.get(path, function(data) {
    console.log(data);
});

【讨论】:

  • OP 中提到了从不同的域中获取,因此需要注意的是,这只有在源域愿意合作并提供适当的 CORS 标头时才有效。
  • 但是通过script标签加载正常脚本不需要来自其他来源的服务器的任何特殊合作,对吧?这意味着您要么加载脚本执行它,要么根本无法加载它..我认为有点连线
  • 我认为如果没有正确的 CORS 标头,即使在 script 标记中,您也可能无法从另一个域加载脚本。不过这个限制是由浏览器强加的,所以它可能会限制某些类型的跨站点内容而不限制其他类型的内容并非不可想象。
  • 据我了解,在 CORS 标头之前,从另一个来源加载数据的唯一方法是 JSONP,它实际上是使用 script 加载数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2013-11-18
  • 2012-09-03
  • 2016-04-03
  • 2012-12-04
  • 2015-06-12
相关资源
最近更新 更多