Как я могу получить свой JavaScript, ссылающийся на внешнюю переменную, для проверки? - PullRequest
2 голосов
/ 27 марта 2009

У меня есть HTML-файл с парой внешних файлов JavaScript. Вот пример, несколько упрощенный из реальных файлов HTML и JavaScript:

<head>
  <title>Control Page</title>
  <script language="JavaScript" src="control.js"></script>
  <script language="JavaScript">
    var myWindow;
    var controlForm;

    function onPageLoad() {
      myWindow     = document.getElementById('iframe1');
      controlForm  = document.getElementById('ControlForm');
    }
  </script>
</head>
<body onLoad="onPageLoad()">
  ....
</body>
</html>

и затем в моем файле JavaScript control.js:

function messageArrival(message) {
    chatwindow.contentWindow.document.write(message)
}

function makeNetMeetingCall() {
  controlForm.Status.value = ....
}

....

Мой вопрос: когда я проверяю внешний файл JavaScript, он жалуется на переменные, которые определены в основном файле HTML, потому что они нигде не объявлены в файле *.js. Например, редактор JavaScript MyEclipse жалуется, что видит используемые переменные, которые не определены ни в одной видимой области видимости. Как я могу объявить эти переменные в файле JavaScript, чтобы было ясно, что переменные должны быть определены извне, что-то похожее на «extern» в C.

Ответы [ 4 ]

4 голосов
/ 27 марта 2009

Это больше похоже на проблему с JS-редактором MyEclipse, чем на JS.

К сожалению, я не знаком с MyEclipse. Однако я знаю хороший валидатор JS, JSLint , который учитывает глобальные переменные, определяя их в комментариях:

/*global getElementByAttribute, breakCycles, hanoi */
1 голос
/ 27 марта 2009

Вы можете объявить переменные в глобальной области видимости вашего файла control.js.

var controlForm;
function makeNetMeetingCall() {
 // ...
}

это не будет мешать коду, который окончательно определяет эти объекты, так как он выполняется первым. Но даже если этого не произойдет, без инициализатора ничего не будет перезаписано.

Если вам нужны доказательства о перезаписи, просто сделайте это в оболочке JS:

$ js
js> var x = 1;
js> print( x );
1
js> var x;
js> print( x );
1
js>
0 голосов
/ 27 марта 2009

Вам необходимо объявить переменные перед включением скрипта controls.js:

<script language="JavaScript">
var myWindow;
var controlForm;
function onPageLoad() {
   myWindow     = document.getElementById('iframe1');
   controlForm  = document.getElementById('ControlForm');
}
</script>
<script language="JavaScript" src="control.js"></script>

Это должно остановить затмение от жалоб, но исполнение будет таким же.

0 голосов
/ 27 марта 2009

На самом деле проблема в том, что ваша "IDE" не знает о них. Он не связал переменные JS HTML-страницы с внешним файлом javascript. Одним из способов решения этой проблемы является помещение объявления переменной во внешний файл javascript.

...