1

可能重复:
如何获取指定为 <script> 标签的“src”的文件内容?

这似乎是一个奇怪的问题,但它一直在我的脑海中。假设我有一个引用一个或多个 JavaScript 文件的 HTML 文件,这些文件是本地的,但可能是外部的。现在出于某种原因(我自己的好奇心),我希望将其中一个文件的内容像字符串一样输出,并将其写入控制台甚至alert内容。假设我有以下名为 jsFile.js 的 JS 文件:

// JavaScript Document
var testString = "I am just an output... or am I",
    testNumber = 1,
    testArray = [],
    testObject = {};

// random functionality, etc... etc...
if(testNumber > 100){
    // do something...
}

我想在打开我的 HTML 页面时像这样输出:

警报图像

但是我不确定如何执行此操作,我可以SCRIPT在 dom 中找到标签并使用其上的方法来输出它的内容(见下文)还是我必须读取文件(以某种方式)然后循环遍历收集的每一行代码它在一个变量中,然后通过alert或输出它console.log

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hello World</title>
</head>
<script type="text/javascript" src="jsFile.js"></script>
<script type="text/javascript">

// find the JS node...
window.onload = function(){

    var theFile = document.getElementsByTagName("script")[0];

    // none of these will work as the code within the jsFile.js is not a DOM object...
    console.log(theFile.text); // returns a zero length string
    console.log(theFile.innerHTML); // returns a zero length string
    console.log(theFile.textContent); // returns a zero length string   

}

</script>
<body>
I am just a HTML file... no more, no less...
</body>
</html>

以上是我的第一次尝试,但是这些方法都不起作用,因为脚本的内容不是 DOM 对象。我不需要特定于代码的答案,只需证明概念、想法或指向正确方向即可。如果我没有意义,请这么说,我会改写我的问题。

4

2 回答 2

3

您需要向该脚本的 URL 发出 AJAX 请求,并在您想要的任何位置显示内容(只需抓取responseText),它是服务器端资源,返回的内容将是您的 javascript :)

于 2012-08-27T13:03:14.270 回答
0

虽然epoch基本上已经回答了这个问题,但我被这个挑战触发了,我编写了一个小片段,将所有脚本资源转储到控制台,前提是它们位于同一域(来源)上。我已经在 Chrome 中测试过了。

var f = function (src) {
   var origin = location.origin || (location.protocol+'//'+location.hostname);
   if (src.substr(0, origin.length) != origin) {
      return;
   }
   x = new XMLHttpRequest();
   x.open("GET", src.substr(origin.length), true);
   x.onreadystatechange = function () {
      if (x.readyState == 4 && x.status == 200) {
         console.log(x.responseText)
      }
   };
   x.send();
};
var s = document.getElementsByTagName('script');
for (var i = 0; i < s.length; ++i) {
   f(s[i].src);
}
于 2012-08-27T13:16:31.613 回答