2

我有一个带有几个外部 JavaScript 文件的 HTML 文件。这是一个示例,从真实的 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文件中的任何地方声明。例如,MyEclipse 的 JavaScript 编辑器抱怨它看到使用的变量未在任何可见范围内定义。如何在 JavaScript 文件中声明这些变量,以便清楚地知道这些变量应该在外部定义,类似于externC 中的“”。

4

4 回答 4

4

这听起来更像是 MyEclipse 的 JS 编辑器的问题,而不是您的 JS。

不幸的是,我不熟悉 MyEclipse。但是,我确实知道一个很好的 JS 验证器JSLint,它通过让您在注释中定义全局变量来解释它们:

/*global getElementByAttribute, breakCycles, hanoi */
于 2009-03-27T00:20:49.230 回答
1

您可以在 control.js 文件的全局范围内声明变量。

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

这不会干扰最终定义这些对象的代码,因为它首先执行。但即使没有,如果没有初始化程序,它也不会覆盖任何东西。

如果您需要有关覆盖的证据,只需在 JS shell 中执行此操作:

$ js
js> var x = 1;
js> print( x );
1
js> var x;
js> print( x );
1
js>
于 2009-03-27T00:24:39.580 回答
0

实际上,问题在于您的“IDE”不知道它们。它没有将 HTML 页面 JS 变量与外部 javascript 文件连接起来。解决此问题的一种方法是将变量声明放入外部 javascript 文件中。

于 2009-03-27T00:19:48.907 回答
0

您需要在包含 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>

这应该可以阻止 eclipse 抱怨,但执行方式是一样的。

于 2009-03-27T00:20:22.180 回答