0

It is a rather wierd problem. Consider the following small perl code:

#!/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>";

It prints a very small html page and includes a jasvascript file. The problem is that the javascript file isn't included. The "physical" copy is in the correct place. I thought that something may be wrong with the code I am generating so I copied the raw html which comes out if you run this file in the console which is: Content-type: 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>

I ran it in chrome and it worked perfectly. The javascript file has exactly one line if code which is:

console.log("It works!");

Any ideas what may be causing this? Note: I know that the second code listing doesn't have !DOCTYPE.

2 Answers 2

4

Since you are able to execute the CGI within your browser you must have a local web server running. Your <script src='...'> path is likely unreachable from the browser due to a lack of access rights or the proper alias configured within your web server.

It works from the static file because the browser is then going though filesystem directly, so the JS file path name resolves.

You have to put the .js file somewhere that the web server knows about, and then formulate your src path correctly.

Check your web server logs and documentation to see how to set up the proper access rights and/or aliases. Note you probably do not want to expose ~/Desktop to the internet.

As an example, if you are using Apache, see USERDIR, ACCESS CONTROL, ALIAS.

Sign up to request clarification or add additional context in comments.

Comments

0

After some tinkering I found the solution:

Apache searches for scripts and files only in the folder for this website meaning that each website has one specific folder where you must put the scripts. The base folder path is: /var/www/ and from there on you must find your website.

This means that when before the set path was: /home/bloodcount/Desktop/pm.js it actually searched for the path /var/www/home/bloodcount/Desktop/pm.js which didn't exist. It wasn't searching in the real desktop, nor was there a permission problem.

1 Comment

Yeah, I figure you deserve the correct answer. Will leave my answer in case someone wants to know the concrete stuff.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.