脚本"src"标签问题

3

我有一个嵌入在页面中的脚本,如下所示:

<script type="text/javascript">

function fireNlPopup()
{
    setOpacity(0);
    centre();
    document.getElementById("NlPopup").style.display = "block";
    fadeInNlPopup();
}

//Other functions here

</script>

这将使以下内容以弹窗形式出现在窗口内:
<div id='NlPopup' name='NlPopup' class='nl'>
<table width='380' cellpadding='0' cellspacing='0' border='0'>
<tr>
<td><img height='23' width='356' src='images/x11_title.gif'></td>
<td><a href='javascript:fadeOutNlPopup();'><img height='23' width='24' src='images/x11_close.gif' border='0'></a></td>
</tr>
<tr><td colspan='2' style='background: url("images/x11_body.gif") no-repeat top left; width: 380px; height: 277px;'>
Your next lecture is X, with Y, at Z.
</td></tr>
</table>
</div>

最后,这是由按钮调用的所有内容:

<button type="button" style="button" onClick="fireNlPopup()">Next Lecture</button>

问题在于当我尝试将脚本放置在不同的文件中时。我有一个名为popup.js的文件,其中包含完全相同的代码(因为在我的php文件中嵌入后可以正常工作,所以我认为如果我将其复制到js文件中并调用它,它应该也可以正常工作)。
当我调用js文件时,我使用:
<script type="text/javascript" src="popup.js">
</script>

然后,脚本标签之间的所有内容都放在popup.js文件中。但是,尽管嵌入式代码正常工作,但一旦将其取出并放入自己的文件中,它就不起作用了。我已经反复检查过代码是否正常工作、语法是否正确,所以我把它放在了代码片段外面。但由于某种原因,它就是停止工作了。我是不是调用文件有误?它在我的服务器上,我也已经检查过了=P
我可能很愚蠢,但任何帮助都会非常有用。我已经陷在这个问题里很久了。
谢谢 =)
编辑:对于那些想要查看的人,页面可以在此处查看:http://oliverlea.com/3yp/tt.php 另外,使用Chrome查看源代码时,该文件会作为链接加载。
感谢您的帮助=)
第二次编辑:
首先,是的,脚本标签在我的文件头中。
其次: 无论我使用src="popup.js" "/popup.js"还是"./popup.js",我都得不到任何东西。URL始终在Chrome的源查看器中加载,即使将文件权限更改为0755,仍然没有任何区别。
我完全被这个问题难住了。

尝试在Chrome中查看网站并查看页面源代码。 Chrome将使scriptsrc成为链接,以便您可以单击它。查看是否加载了您的脚本。如果没有,则它没有指向正确的位置。或者,只需在URL末尾放置popup.js,然后查看是否加载。 - Marshall
首先,在Firebug中检查一下你的"popup.js"脚本是否已经加载。 - Just_Mad
请看我的答案,以解决你的问题。如果使用“困惑”的词汇,将会得到加分。 - Dmitriy Khaykin
4个回答

2
脚本需要解析后才能被引用。这是一个经典的竞态条件。如果您要在DOM中引用它,请确保脚本位于<head>中。同时,确保您在src="/path/to/popup.js"中的路径正确。

1

这是popup.js文件的编码问题。请参见下面的分析。有些浏览器会自动“修复”此问题,而其他浏览器则不会。解决方案是将popup.js文件保存为标准编码,在Windows机器上尝试在记事本中保存。

编辑:添加摘要(上文)。以下是您问题的完整分析:

您的页面在IE9中可以正常工作,但在Chrome或Firefox中无法正常工作。此外,我将页面和您的CSS和JS(但不包括图像)复制到本地项目中,它在那里也可以正常工作(甚至在Chrome和Firefox中也可以正常工作)。

然后,我在FireFox中加载了您的实时页面并打开了FireBug,当我单击“下一讲”时,控制台显示FireNlPopup未定义。

经过进一步审查,我在FireFox上查看了您的实时页面源代码,并单击“popup.js”。结果看起来像这样:popup.js source view in firefox

看起来您正在使用某种文本编辑器创建您的popup.js文件,该文件以奇怪的格式进行编码;请使用标准记事本或Notepad++(即不要使用Wordpad),或使用Eclipse或Visual Studio保存popup.js文件,您就可以解决问题了。


可能是他的FTP应用程序以二进制模式上传的。 - AlienWebguy
是的,这可能是情况,但他没有提到它在本地工作而上传到托管提供商时不起作用的情况。 - Dmitriy Khaykin
哦,我的天啊,我爱你。原来WinSCP上传的是二进制文件(我已经修复了),而我选择的编辑器TextPad区分Unicode和UTF-8。将其从Unicode更改为UTF-8解决了问题。非常感谢! - omicronlyrae

0

尝试使用:

<script type="text/javascript" src="/popup.js"></script>

或者如果那不起作用:

<script type="text/javascript" src="./popup.js"></script>

可能是找不到路径,但使用Firebug或Chrome的控制台应该能够告诉你。


0
我有一个不同的原因,但是相同的症状。本质上,我没有意识到服务器上的脚本文件需要在路由表中添加才能检索它。回想起来有点愚蠢,但我可能会为其他人节省一些时间。
顺便说一下,我使用node.js添加了以下内容;
// script routes
app.get('/scripts/:script',                  script_server.serve);

并且在 script_server.js 中

exports.serve = function(req, res){
  res.sendfile(req.param('script'));
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接