这是一个相当奇怪的问题。考虑以下小的perl代码:
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw{ :standard };
use CGI::Carp qw{ fatalsToBrowser };
my $q = CGI->new;
print "Content-type: text/html\n\n";
print "<head>\n";
print "<script src='/home/bloodcount/Desktop/pm.js' type='text/javascript'></script>\n";
print "</head>\n";
print "<body>\n";
print "<h1>Click any number to see its factors</h1>\n";
print "</body></html>";
它打印一个非常小的html页面并包含一个jasvascript文件。问题是不包含javascript文件。 “物理”副本位于正确的位置。我认为我生成的代码可能有问题所以我复制了原始的html,如果你在控制台中运行这个文件就会出现: 内容类型:text / html
<head>
<script src='/home/bloodcount/Desktop/pm.js' type='text/javascript'></script>
</head>
<body>
<h1>Click any number to see its factors</h1>
</body></html>
我用它运行它,它完美无缺。如果代码是:
,则javascript文件只有一行console.log("It works!");
任何可能导致此问题的想法? 注意:我知道第二个代码清单没有!DOCTYPE。
答案 0 :(得分:4)
由于您可以在浏览器中执行CGI,因此必须运行本地Web服务器。由于缺少访问权限或Web服务器中配置的正确别名,您的<script src='...'>
路径可能无法从浏览器访问。
它从静态文件起作用,因为浏览器直接通过文件系统,因此JS文件路径名解析。
您必须将.js
文件放在Web服务器知道的某个位置,然后正确地制定您的src
路径。
检查您的Web服务器日志和文档,了解如何设置正确的访问权限和/或别名。请注意,您可能不希望将~/Desktop
公开给互联网。
例如,如果您使用的是Apache,请参阅USERDIR,ACCESS CONTROL,ALIAS。
答案 1 :(得分:0)
经过一些修修补补后,我找到了解决方案:
Apache仅在此网站的文件夹中搜索脚本和文件,这意味着每个网站都有一个必须放置脚本的特定文件夹。基本文件夹路径为:/var/www/
,从那里您必须找到您的网站。
这意味着在设置路径之前的时间是:/home/bloodcount/Desktop/pm.js
它实际上搜索了不存在的路径/var/www/home/bloodcount/Desktop/pm.js
。它没有在真实桌面中搜索,也没有权限问题。