javascript读取文件解决方法(查看脚本但不加载它)

时间:2011-07-13 04:17:18

标签: javascript file

编辑我的问题是误导性的,因为我想读取/写入客户端计算机的时候,我的意思是我想从源头读取脚本,而不是加载它电脑。我只是假设你可以召唤(加载)这样的脚本

<script LANGUAGE="javascript" SRC="source.js"></script>

然后必须有一些方法来在加载之前,期间或之后读取source.js。我问,因为我仍在努力寻找上一个问题here的答案。我试图找到一些方法来使对象/函数/类能够识别产生它的代码,包括注释和标签以及所有。

4 个答案:

答案 0 :(得分:3)

您可以通过ajax加载它并将其作为字符串

访问
$.ajax({
    type: "GET",
    dataType: "text",
    url: "jsLoader.php",
    success: function(data){
        alert("Length: " + data.length.toString());
        eval(data);
    }
});

或者:

$.ajax({
    type: "GET",
    dataType: "text",
    url: "source.js",
    success: function(data){
        alert("Length: " + data.length.toString());
        $("head").append('<script type="text/javascript">' + data + '</script>');
    }
});

答案 1 :(得分:2)

你的问题有点令人困惑,但听起来你想要一种访问对象代码的方法。说实话,我不知道你可以用这种方法得到多少,它不会包含注释,但你总是可以使用toString()。

e.g。

function myFunc() {
    var somestuff = "my function's code";
};

function myClass() {
    var that = this;
    this.classFunc = function() {
        var somethingelse = "my class function's code";
    }
}

alert(myFunc.toString() + '\n\n' + myClass.toString());

答案 2 :(得分:0)

也许我对你的问题感到有些困惑,但首先要做的事情是:

<script LANGUAGE="javascript" SRC="source.js"></script>

不从客户端的机器读取,它从Web上下文中读取页面的加载。如果你加载的html页面是www.google.com,那么src =“source.js”将加载www.google.com/source.js

如果我正确理解你的问题,我认为你的问题的答案是在加载网页时不会异步读取source.js。假设source.js只包含这一行。

var variable = {};

在index.html中,你有这个:

<script type="text/javascript">
  alert(typeof(variable));
</script>

<script type="text/javascript" src="source.js"></script>

<script type="text/javascript">
  alert(typeof(variable));
</script>

然后,第一个警报将给你“未定义”,第二个警报将给你“对象”。因此,如果您想测试是否加载了source.js,您只需执行快速条件:

if (typeof(variable) != "undefined") { doSomething(); }

答案 3 :(得分:0)

解决这个问题的一种方法是设置一个php脚本,该脚本获取代码服务器端,将其包装在函数/对象中,并在这样做时将代码分配为字符串变量,有点像这样

/*Get js script at $filename*/
$script = fread($handle, filesize($fileName));

/*Add the code as a string*/
$codeAsString = file_get_contents($fileName);
$script .= '_code=' . json_encode($codeAsString) . ';';

但这并没有解决无法调试代码的更大问题。这样做的原因是我使用eval而不是包含脚本。前者执行代码,而后者更新DOM 然后执行代码。只有后者才能提供有用的调试信息(参见here)。