Javascript读取文件的解决方案(查看脚本,但不加载它)

javascript read file workaround (to view script but not load it)

本文关键字:加载 脚本 文件 读取 解决方案 Javascript      更新时间:2023-09-26

EDIT我的问题是误导,因为它听起来像我想读/写客户端机器时,我的意思是,我想读一个脚本,而不是加载它,从源计算机。我只是假设,因为你可以召唤(加载)一个脚本,像这样

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

那么必须有一些方法来读取source.js之前,期间或之后加载它。我问这个问题是因为我还在努力寻找我之前问题的答案。我正试图找到一些方法,使对象/函数/类意识到产生它的代码,带有注释和制表符等。

您可以通过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>');
    }
});

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

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());

也许我对你的问题有点困惑,但首先要做的是:

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

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

如果我正确理解你的问题,我认为你的问题的答案是,源。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>

那么,第一个警报会给你"undefined",第二个警报会给你"object"。因此,如果你想测试source.js是否被加载,你可以简单地执行一个快速的条件语句:

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

解决这个问题的一种方法是设置一个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 ,然后执行代码。只有后者才会提供有用的调试信息(见这里)。