我正在建立一个AJAX深层链接网站。
如果用户尝试使用Javascript不支持的浏览器访问网站或者是搜索爬虫,我希望PHP加载页面的所有HTML代码。基本上PHP将返回整个页面。
相反,当用户尝试使用支持Javascript的浏览器访问该站点时,我希望PHP只返回模板代码,让Javascript(AJAX)处理剩下的事情。基本上PHP只会加载设计元素,让Javascript用内容填充它们。
我查看了PHP的get_browser()
函数,但它似乎不是一个可靠的工具。什么是行业的做法,看看浏览器是否支持Javascript,或者它是使用PHP的搜索爬虫?
背景 :
为什么我希望网站有这种行为。
由于我希望仅通过加载地址来加载主页:example.com
,它不向PHP发送任何查询,PHP返回主页的HTML代码。但是,当用户尝试加载以下页面时,这会导致问题:example.com#foo
。因此,对于此示例,PHP将返回主页,并且一旦加载主页,Javascript(AJAX)将更改内容,以便它显示#foo
的正确内容。这将使用户看到主页,因此加载时间将变慢并且用户体验将不会那么好。但是,如果我的PHP脚本可以弄清楚,如果使用Javascript支持的浏览器试图加载页面,它将只返回网站的模板,该模板没有内容)并且javascript将使用内容填充该模板应该为#foo显示。另一方面,如果Javascript非分离浏览器或爬虫将尝试访问页面example.com#foo
,则将返回主页。
我正在使用SWFaddress(http://www.asual.com/swfaddress/)库进行深层链接。
修改
谢谢你们。我之前没想过使用<noscript></noscript>
。
这是我决定做的。 PHP默认情况下会加载example.com
或example.com#foo
等页面(从PHP的角度来看与example.com
基本相同,因为定义的片段不会发送到服务器)空白(只是视觉模板)里面有<noscript>
标签,用于主页的内容。这样,使用javascript的用户将看不到主页,AJAX将根据#foo
片段填充页面内容。另一方面,搜索爬虫和没有javascript的用户将看到主页。
再次感谢你。我认为这是非常简单和优雅的解决方案。如果您有任何进一步的建议,请发表评论或其他答案。
答案 0 :(得分:5)
你不能用PHP做到这一点。你可以做的是使用一个noscript标签重定向到另一个php页面,如果他们没有javascript:
<noscript>
<meta http-equiv="refresh" content="0; URL=nojavascript.php">
</noscript>
答案 1 :(得分:1)
不可能以你想要的方式实现这一目标。
很少有人关闭JS并且不知道它。
PHP在#之后没有传递任何东西,只有javascript可以做任何事情。因此,即使PHP可以确定浏览器是否启用了javascript,它仍然无法读取#anyways。
答案 2 :(得分:1)
您可以在某些<NOSCRIPT>
代码中添加一个链接,将用户指向example.com#foo?javascript=disabled
。
不幸的是,浏览器不报告是否启用了JS,因此无法通过简单的HTTP GET了解是否应该发送JS依赖页面。
答案 3 :(得分:0)
您应该构建一个AJAX查询,为javascript启用设置会话变量。
在加载网站上的任何其他信息之前运行此AJAX查询,然后执行简单的重定向到实际网站。
你可以做类似这样的伪代码:
的index.php:
ajax(check_js.php);
redirect(main_page.php);
check_js.php
$_SESSION['js_enable'] = true;
main_page.php
if($_SESSION['js_enable'] == true) {
//execute page
} else {
header("Location: no_js_error.php");
}
答案 4 :(得分:0)
而不是服务器试图嗅探我们用户的设置,首先使用unobtrusive javascript怎么样?这样,如果JS不可用,页面将正常降级(达到所需状态)。