Html 如何使用模板生成静态网页?
我想将一个HTML文件添加到另一个HTML文件中 例如:我有Html 如何使用模板生成静态网页?,html,templates,Html,Templates,我想将一个HTML文件添加到另一个HTML文件中 例如:我有header.html和footer.html 现在,我正在尝试创建aboutus.html,我想在其中添加这两个html文件 除了JavaScript,这些文件中没有动态代码 如何在不使用JavaScript和CSS之外的任何脚本语言的情况下实现这一点?在没有JavaScript的客户端上实现这一点的唯一方法是使用框架或iFrame。如果您想使用javascript,可以使用AJAX。大多数javascript框架提供了相应的便利方法
header.html
和footer.html
现在,我正在尝试创建aboutus.html
,我想在其中添加这两个html文件
除了JavaScript,这些文件中没有动态代码
如何在不使用JavaScript和CSS之外的任何脚本语言的情况下实现这一点?在没有JavaScript的客户端上实现这一点的唯一方法是使用框架或iFrame。如果您想使用javascript,可以使用AJAX。大多数javascript框架提供了相应的便利方法(例如jQuery函数)
显然有很多服务器端解决方案,包括流行的针对apache的SSI扩展(请参阅其他文章)。或者,所有嵌入都在服务器端完成…针对这一特定功能存在。但是,您需要为此类包含配置服务器。Apache支持它。不确定其他web服务器。显然header.html和footer.html不是html文件——具有完整的页眉等。如果您只有html片段,并且希望包含它们,以便可以创建不同的页面-例如aboutus.html、terms.html,您有两个选项:
我假设您这样做是为了避免重复页眉和页脚内容。另一种方法是使用ajax包含远程html文件。为什么不使用php或任何其他脚本语言
使用javascript执行此操作并不是所有用户都允许查看您的页面。我不完全确定您想要的是什么,但一种完全客户端的方法是将它们嵌入
标记
<html>
<head>
<title>About Us</title>
</head>
<body>
<object data="header.html"><!--Something to display if the object tag fails to work. Possibly an iFrame--></object>
<!--Content goes here...-->
<object data="footer.html"></object>
</body>
</html>
关于我们
如果
header.html
或footer.html
具有访问父文档的javascript,我认为这不起作用。不过,让它以另一种方式工作可能是可能的。虽然JS可以通过多种方式(AJAX、iframe插入)实现这一点,但如果不直接在标记范围内实现,或者在服务器端(更好)实现这一点,那将是一个非常糟糕的主意
一个依赖JS构建的页面在大部分用户的浏览器上都不会完全呈现,同样重要的是,如果谷歌等用户喜欢的话,他们也不会正确解读
您可以这样做,但请不要这样做。对于没有动态内容但具有公共元素的网站,我使用Perl在开发机器上生成最终页面,并将生成的静态HTML文件上载到服务器。工作得很漂亮 例如: header.html
[%title%]
横幅
footer.html
或构建页面。框架集将是一种在不受任何脚本或服务器端影响的情况下完成此操作的方法
<frameset rows="100,*,100">
<frame name="header" src="header.html" />
<frame name="content" src="content.html" />
<frame name="footer" src="footer.html" />
</frameset>
HTML5框架集:
这是一个非常过时的解决方案,大多数web主机将支持服务器端包含,或者您可以使用php包含您的文件
干杯请访问ppk的网站(quirksmode.org),并访问javascript档案,
(http://quirksmode.org/js/contents.html). 他使用自己编写的名为sendRequest(位于)的ajax函数。由于IE9+很好地处理了标准,我将其简化了一些:
function sendRequest(url,callback,postData) {
var req = new XMLHttpRequest();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method,url,true);
req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (postData)
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
// alert('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
}
然后通过包装setFooter、setHeader函数和任何其他内容函数来使用sendRequest函数。是的,我希望避免重复并以适当的方式管理它。浏览器支持如何,或者这不是此技术的问题?您可以在标记内包装一个iframe。如果它工作,iframe将被忽略。如果不支持该标记,将忽略它,因此将使用iframe.PS。我认为您甚至可以在iframe标记中嵌套一个脚本标记,以防框架被关闭或不受支持。PPS。如果脚本也被关闭,或者正在使用基于文本的浏览器,那么客户端的运气就不好了。这会破坏禁用JavaScript的用户的页面。
[%- INCLUDE header.tt.html
title = 'About Us'
description = 'What we do, how we do it etc.'
keywords = 'rock, paper, scissors'
-%]
<h1>About us</h1>
<p>We are nice people.</p>
<frameset rows="100,*,100">
<frame name="header" src="header.html" />
<frame name="content" src="content.html" />
<frame name="footer" src="footer.html" />
</frameset>
function sendRequest(url,callback,postData) {
var req = new XMLHttpRequest();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method,url,true);
req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (postData)
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
// alert('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
}