Обходной путь чтения файла JavaScript (для просмотра сценария, но не для его загрузки) - PullRequest
0 голосов
/ 13 июля 2011

РЕДАКТИРОВАТЬ Мой вопрос вводил в заблуждение тем, что он звучал так, как будто я хотел читать / писать на клиентскую машину, когда я имел в виду, что я хочу читать сценарий, а не загружать его с исходного компьютера,Я просто предположил, что, поскольку вы можете вызывать (загружать) скрипт, например, так:

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

Тогда должен быть какой-то способ чтения source.js до, во время или после его загрузки.Я спрашиваю, потому что я все еще пытаюсь найти ответ на мой предыдущий вопрос здесь .Я пытаюсь найти способ заставить объект / функцию / класс узнать о коде, который его породил, с комментариями, вкладками и всем прочим.

Ответы [ 4 ]

3 голосов
/ 13 июля 2011

вы можете загрузить его через 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>');
    }
});
2 голосов
/ 13 июля 2011

Ваш вопрос несколько сбивает с толку, но, похоже, вам нужен способ доступа к коду объекта. Честно говоря, я не знаю, как далеко вы сможете продвинуться с этим подходом, и он не будет включать комментарии, но вы всегда можете просто использовать 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());
0 голосов
/ 05 марта 2012

Один из способов обойти это - настроить скрипт 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 , затем выполняет код. Только последний предоставит полезную информацию об отладке (см. здесь ).

0 голосов
/ 13 июля 2011

Может быть, меня немного смущает ваш вопрос, но обо всем по порядку:

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

НЕ читает с компьютера клиента, он читает из веб-контекста, с которого была загружена страница. Если 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(); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...