Perl CGI不包含Javascript文件

时间:2013-12-24 12:27:24

标签: javascript perl cgi

这是一个相当奇怪的问题。考虑以下小的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。

2 个答案:

答案 0 :(得分:4)

由于您可以在浏览器中执行CGI,因此必须运行本地Web服务器。由于缺少访问权限或Web服务器中配置的正确别名,您的<script src='...'>路径可能无法从浏览器访问。

它从静态文件起作用,因为浏览器直接通过文件系统,因此JS文件路径名解析。

您必须将.js文件放在Web服务器知道的某个位置,然后正确地制定您的src路径。

检查您的Web服务器日志和文档,了解如何设置正确的访问权限和/或别名。请注意,您可能不希望将~/Desktop公开给互联网。

例如,如果您使用的是Apache,请参阅USERDIRACCESS CONTROLALIAS

答案 1 :(得分:0)

经过一些修修补补后,我找到了解决方案:

Apache仅在此网站的文件夹中搜索脚本和文件,这意味着每个网站都有一个必须放置脚本的特定文件夹。基本文件夹路径为:/var/www/,从那里您必须找到您的网站。

这意味着在设置路径之前的时间是:/home/bloodcount/Desktop/pm.js 它实际上搜索了不存在的路径/var/www/home/bloodcount/Desktop/pm.js。它没有在真实桌面中搜索,也没有权限问题。