PHP:如何确定浏览器是否支持PHP中的javascript?

时间:2010-11-16 18:08:47

标签: php javascript ajax deep-linking

我正在建立一个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.comexample.com#foo等页面(从PHP的角度来看与example.com基本相同,因为定义的片段不会发送到服务器)空白(只是视觉模板)里面有<noscript>标签,用于主页的内容。这样,使用javascript的用户将看不到主页,AJAX将根据#foo片段填充页面内容。另一方面,搜索爬虫和没有javascript的用户将看到主页。

再次感谢你。我认为这是非常简单和优雅的解决方案。如果您有任何进一步的建议,请发表评论或其他答案。

5 个答案:

答案 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不可用,页面将正常降级(达到所需状态)。