我为其中一个网站项目编写的一系列页面共享了大约144行相同的代码,并在每个文件中重现。如果我更新其中一行,我必须返回共享代码的所有页面并更新每个页面。是否有一种直接的方法来从单独的文件中包含HTML?
对于奖励积分,因为有这么多页面使用这个代码,所以不必为每个页面重新加载它会很好。有没有一种简单的方法可以将它存储在浏览器的缓存中,或者只加载页面的“内容”部分,同时使页面的其余部分保持静态?
感谢您对此有任何了解。
麦克
答案 0 :(得分:3)
我建议在包含
上阅读this article答案 1 :(得分:2)
要从单独的文件中包含HTML,请使用SSI(服务器端包含)。但是,这需要在服务器上安装SSI支持。
你会在你的文件中写这样的东西:
<!--#include file="included.html" -->
这将包括访问页面时的文件included.html。
要仅加载每个页面的内容,请使用JavaScript中的XMLHTTPRequest对象:
function LoadContent(url)
{
if (typeof(XMLHttpRequest) == "undefined")
{
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
// fallback for browsers without XMLHttpRequest
window.location.href = "no-ajax.php?url="+escape(url);
return;
}
}
}
else
{
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open("GET", url, false); // this request will be synchronous (will pause the script)
xmlhttp.send();
if(xmlhttp.status > 399) // 1xx, 2xx and 3xx status codes are not errors
{
// put error handling here
}
document.getElementById("content").innerHTML = xmlhttp.responseText;
}
答案 2 :(得分:1)
如果我们假设您正在谈论直接html页面,没有服务器代码(asp.net,php或服务器端包含能力),那么为了做到这两点包括和缓存,你将需要使用iframe。
每个复制144行内容的网页都应该用iframe替换它:
<iframe src="pagewithcontent.html"></iframe>
pagewithcontent.html显然是您将内容移动到的位置。浏览器将适当地缓存页面,以便每个父页面只需获取共享内容而无需另外请求。
There's an article here深入介绍了html包含,以及一些javascript方法。我强烈建议不要使用javascript方法。
我的回答反映了您无法在服务器端执行任何操作的假设。但是,到目前为止,最好的解决方案是尽可能这样做。