我有一组perl CGI网页,我试图进行一些重构,但已经遇到了问题。
这些脚本中的每一个都有一些当前以以下形式编写的javascript和CSS:
my $JSCRIPT = << CODE;
function doStuff() {
// Stuff
}
CODE;
my $CSS = <<BLOCK;
.css-stuff{}
BLOCK
稍后使用CGI将javascript和CSS加载到页面
print $cgi->start_html( -script => [{-type => "javascript", -code => $JSCRIPT}],
-style => {-code => $CSS} );
有没有一种很好的方法可以重构这段代码,以便不是在多个文件中包含那个$ JSCRIPT的副本,而是可以有一个common.js
或类似的文件?如何包含文件来完成此操作?
答案 0 :(得分:1)
而不是-code
使用-src
,如CGI文档中所示。
print $q->start_html(-title=>'The Riddle of the Sphinx',
-script=>{-type=>'JAVASCRIPT',
-src=>'/javascript/sphinx.js'}
);
print $q->start_html(-title=>'The Riddle of the Sphinx',
-script=>[
{ -type => 'text/javascript',
-src => '/javascript/utilities10.js'
},
{ -type => 'text/javascript',
-src => '/javascript/utilities11.js'
},
{ -type => 'text/jscript',
-src => '/javascript/utilities12.js'
},
{ -type => 'text/ecmascript',
-src => '/javascript/utilities219.js'
}
]
);
答案 1 :(得分:1)
您可以使用以下HTML从文件加载脚本:
<script src="/path/to/file.js"></script>
请注意,/path/to/file.js
与您的网络服务器的文档根目录相关,并且不是文件系统的绝对路径。
您可能已经注意到,在Perl脚本中嵌入HTML / CSS / JavaScript不是很容易维护。我建议您将CSS和JavaScript保存在单独的静态文件中,并使用Template Toolkit之类的模板库来生成HTML。使用模板可以帮助您将表示逻辑与业务逻辑分开,从而使您不必使用CGI.pm
生成复杂HTML的神秘方法。
以下是使用Template Toolkit在运行时填充JavaScript文件路径的示例:
foo.cgi
use strict;
use warnings;
use CGI;
use Template;
my $tt = Template->new or die Template->error;
my $q = CGI->new;
print $q->header;
my $js_file = '/path/to/file.js';
$tt->process('foo.tt', { js_file => $js_file }) or die $tt->error;
foo.tt
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello, Template Toolkit!</title>
<script src="[% js_file %]"></script>
</head>
<body>
<h1>Hello, Template Toolkit!</h1>
</body>
</html>
输出
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello, Template Toolkit!</title>
<script src="/path/to/file.js"></script>
</head>
<body>
<h1>Hello, Template Toolkit!</h1>
</body>
</html>