包括一个 JavaScript 文件,因为它是在脚本标记中编写的

Include a JavaScript file as it was written in a script tag

本文关键字:脚本 JavaScript 文件 因为 包括一      更新时间:2023-09-26

我有一些html,在脚本标签中包含了一堆JS代码。所以我把它移到了一个单独的.js文件中。

JS代码还从CGI加载了一些变量,使用<%ejGet(var)%>形式的字符串。但是在将代码与 HTML 文件分离后,字符串不会替换为服务器中的数据。

没有办法包含JS文件,就好像它是写在脚本标签中的一样,或者有没有另一种方法可以做到这一点?

<script language="javascript">
<!-- hide
var syncNvram = '<%ejGetWl(wlSyncNvram)%>';
...about 1000 lines more...
</script>

因此,将此代码移动到单独的文件后,变量不会加载。

问题是您的<% ejGetWl(wlSyncNvram) %>在发送到浏览器之前由某个模板或处理引擎在服务器上执行,因此浏览器实际上看到了输出,例如

var syncNvram = 'abcdefg';//或任何输出

你真正要问的问题是,我的服务器端模板/处理引擎可以处理javascript文件而不是html文件吗?

答案是,这取决于模板/处理引擎,但总的来说,这是一个坏主意。JS文件应该保持静态资产,原因有很多(破坏代码,通过CDN分发等)

更好的办法是将它们分开:

<script>var syncNvram = '<%ejGetWl(wlSyncNvram)%>';</script>
<script src="myfile.js"></script>

单独声明。

更好的可能是使用 ajax 来获取它,但这是一个完全不同的架构,可能不适合这里。

为此,您需要从CGI程序生成脚本。

<script src="/cgi-bin/example.js.cgi"></script>

当然,这将是一个不同的CGI程序,因此将变量置于正确的状态可能会有问题。

通常,您将使用不同的方法解决问题:将数据包含在文档中(在脚本元素中或元素(如<meta>元素、隐藏输入或相关内容的data-*属性)中,然后让静态脚本从 DOM 读取数据。