我继承了遗留代码库/网站http://ninjawars.net。在我开始在网站上编码之前,iframe已经到位。
我经常听到iframe的问题(安全性,可访问性,布局问题),而且我很确定iframe对搜索引擎不友好(很大的减号)。我个人使用iframe的经历主要是他们的加载时间出现了问题(我猜是很多http请求?)。
不幸的是,没有人说“摆脱iframe”也能为我的情况提供有效的解决方案,通常假设框架内容的简单包含会使所有的彩虹和独角兽(例如Converting from iframes )。就我而言,静态包含解决方案对我来说几乎没有。
jQuery load()(例如,将内容动态加载到div中)更合适,但转换到该方法需要花费时间,并且不利于搜索引擎的可访问性或非javascript浏览用户。 jQuery load()修复了速度问题,但我不确定它是否修复了可访问性问题。即使没有javascript,iframe仍可正常工作(手动点击),但是保持iframe在javascript下工作的额外支持是否切实可行,我不确定。
答案 0 :(得分:4)
iframe不是某些无名恶魔的产物,因为有些人会让你相信。它们仍然是Web应用程序非常有用的地方。
然而,他们肯定 对搜索引擎优化不利!除非绝对必要,否则我绝不会建议“正常”的公共网站使用它们,特别是如果SEO是一个大问题。
我认为jQuery是解决可访问性问题的好选择。关于jQuery的一个好处是,很容易让那些没有javascript的用户(如搜索引擎)优雅地降低你的网站。
基本上我使用jQuery处理新的公共网站的方式如下:
使用静态导航构建网站。我通常会从某个ajax请求中获取的所有内容块(在您的情况下,在iframe中),我可以在自己的页面中访问。 “联系我们”表单是一个很好的例子 - 将它放在非javascript用户自己的页面中,但它最终会将ajax加载到普通用户的模态div中。静态导航可确保搜索引擎查看所有内容。在您的情况下,将iframe替换为仅包含指向iframe当前正在加载的网页的链接的div。
添加jQuery。一次取一页,开始用ajax调用替换所有出现的静态导航链接,以加载你想要的内容。
不断重构javascript,直到您将其缩小为可在网站上的所有导航中运行的脚本。
以下是一个简单优雅可降级网站的示例(取自我工作过的网站):
$(document).ready(function() {
$("#menu a[href]").each(function() {
this.href = this.href.replace(/Index/, "Ajax");
})
.click(function() {
$.get(this.href, null, function(data) {
var $main = $("#main");
$main.hide();
$("#main").html(data);
$main.fadeIn("slow");
});
return false;
});
此脚本在网站的所有页面中运行,用“/ Ajax /”替换菜单导航目标URL中出现的任何“/ Index /”,将URL重定向到返回ajax响应的资源,然后添加单击处理程序,处理将内容添加到页面。
现在,搜索引擎和非JS用户可以按照静态导航进行操作,并且JS用户可以获得更快捷的UI效果。
答案 1 :(得分:1)
您是否考虑过将jQuery的Ajax功能与history plugin结合使用?这样,您可以保留浏览器的后退按钮功能,并确保支持书签,而无需在网站上导航时重新加载整个静态页面。我不知道它是否对搜索引擎友好(我喜欢让自己相信它是。)
答案 2 :(得分:1)
我假设您希望保持界面基本相同 - 左侧,右侧和顶部始终保持在同一位置,中心部分可以根据需要向下滚动。如果这是真的,我会尝试以下布局:
不可否认,这不是最优雅的解决方案(我更喜欢使用像Apache Tiles in Java这样的库)。但它过去对我来说效果很好。使此可维护性的关键是使每个包含文件以该部分的<div>
标记开头,并以该部分的</div>
标记结束。编写包含在不同级别上开始和结束的文件,或者打开必须在另一个文件中关闭的div,这是令人头疼的原因。