网站开发头部及底部公共部分共用方法

443 阅读2分钟

进行网站开发时,头部导航栏及底部信息基本每个页面都会有,为了减少重复代码,往往都会提取出来作为公共部分。

方法一:使用iframe框架(不建议使用)

如引入公共部分底部页面代码示例,不过iframe中的样式需要自己微微调整下。

    //使用div包裹起来,防止样式发生改变
   <div class="footer">
    <iframe src="footer.html" width=""; height="" frameborder="0" scrolling="no" ></iframe>
   </div>  

现在已经很少有人在使用,大概原因有这几点:

第一点:iframe创建要慢 1-2 个数量级。

第二点:window 的 onload 事件需要在 iframe 加载完毕后才会触发,这样就照成堵塞Onload事件。

第三点:浏览器对相同域的连接有限制,而iframe和主页面共享连接池,所以会照成主页面的资源加载阻塞。

第四点:不利于爬虫录入。

第五点:移动端对iframe不友好。

方法二:使用jQuery

    <div class="header"></div>
    <div class="footer"></div>
    
    //引入jQuery
    <script src="js/jquery-3.3.1.js"></script>
    
    <script type="text/javascript">

      $(".header").load("header.html");

      $(".footer").load("footer.html");

   </script>

如果使用原生js写的官网,只是为了调用公共部分,而引入一个jQuery文件,有点浪费资源,可以使用ajax加载公共页面部分。

方法三:使用ajax

//调用函数,使用
ajaxFunction("footerID", "footer.html")

//使用ajax加载公共页面部分
function ajaxFunction(id, url) {
	//获取传入的id
	let elemId = document.getElementById(id);
	//判断传递ID的元素在页面中不存在
	if (!elemId) {
		return;
	}

	let xmlHttp; //创建对象
	xmlHttp = new XMLHttpRequest();
	// Firefox, Opera 8.0+, Safari
	if (xmlHttp.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		//IE
		let XMLArr = ['Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.2.0'
		]

		let XMLArrLength = XMLArr.length;
		for (let i=0;i<XMLArrLength;i++) {
			try{
				xmlHttp = new ActiveXObject(XMLArr[i]);	
				break;
			}catch(e){}
	 	}
	}

	//进行初始化,设置请求方法和url,true 异步
	xmlHttp.open("GET", url, true);
	//发送请求
	xmlHttp.send(null);

	//绑定返回结果
	xmlHttp.onreadystatechange = function() {
		//  readyState 状态4 代表返回所有结果
		if (xmlHttp.readyState == 4) {
			//获取响应并提取第二个html页面的主体部分,避免将第二个页面的标题部分插入到第一个页面的元素中
			let respText = xmlHttp.responseText.split('<body>');
			//截取的内容插入页面中,innerHTML将代码片段进行渲染
			elemId.innerHTML = respText[1].split('</body>')[0];
		}
	}
}

不用单独引入jQuery,直接在原生js中写就行,减少了资源的加载。

方法四:写成js

共用head.js,底部foot.js在主页文件代码的开始位置和结束位置分别增加引入代码:

    <script src='head.js'>
    <script src='foot.js'>

头部js代码块示例:

    document.writeln("<html lang="zh-CN">");
    document.writeln("<head>");
    document.writeln("<title></title>");
    document.writeln(" <link href='head.css'  rel="stylesheet" type="text/css" />");
    document.writeln("</head>");
    document.writeln("<body >");
    document.writeln(" <div class='header'>");
    document.writeln("    <ul>");
    document.writeln("      <li><a href="">首页</a></li>");
    document.writeln("      <li><a href="">品牌</a></li>");
    document.writeln("      <li><a href="">介绍</a></li>");
    document.writeln("      <li><a href="">关于</a></li>");
    document.writeln("    </ul>");
    document.writeln("</div>");
    document.writeln("</body>");
    document.writeln("</html>");

有HTML转js的工具:tool.chinaz.com/Tools/Html_… 但是个人不太喜欢这样做。

image.png

还有就是可以使用innerHTML进行内容填充,个人也不太喜欢这样弄。

document.getElementById("header").innerHTML = "....";
document.getElementById("footer").innerHTML = "....";

方法五:使用后端语言如php等,还有使用SSI(Server SideInc lude)服务器端嵌入。

因为才疏学浅,所以这里就提一嘴。还有不少方法,搜下都会有。

个人习惯

使用js,jQuery,iframe,对于seo都不太友好,如果对于seo优化不是很严格,个人的做法就是确保首页内容被抓取到,也就是头部内容在首页写死,不使用引入公共的方式,而其他页面都使用引入公共方式,减少代码重复。 不知道这样的做法对不对,如果有问题,请诸位指正。