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

PHP:如何确定浏览器是否支持PHP中的javascript?,php,javascript,ajax,deep-linking,Php,Javascript,Ajax,Deep Linking,我正在构建一个AJAX深度链接站点 如果用户试图使用不支持Javascript的浏览器或搜索爬虫访问站点,我希望PHP加载页面的所有HTML代码。基本上PHP将返回整个页面 相反,当用户试图使用支持Javascript的浏览器访问站点时,我希望PHP只返回模板代码,并让Javascript(AJAX)处理其余部分。基本上,PHP只加载设计元素,让Javascript用内容填充它们 我研究了PHP的get_browser()函数,但它似乎不是一个可靠的工具。业界的做法是什么?看看浏览器是支持Jav

我正在构建一个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()库进行深度链接


编辑

谢谢你们。我以前没有想过使用

这是我决定做的。默认情况下,PHP将加载页面,例如
example.com
example.com#foo
(从PHP的角度来看,这与
example.com
基本相同,因为根据定义,片段不会发送到服务器)空白(仅是可视模板),其中带有
标记,用于主页内容。这样,使用javascript的用户将看不到主页,AJAX将根据
#foo
片段填充页面内容。另一方面,搜索爬虫和没有javascript的用户将看到一个主页


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

以您尝试的方式不可能做到这一点

很少有人关掉JS却不知道


PHP不会在#之后通过任何东西,只有javascript可以使用它做任何事情。因此,即使PHP能够确定浏览器是否打开了javascript,它仍然无法读取任何内容。

使用PHP无法做到这一点。但是,如果没有javascript,您可以使用noscript标记重定向到另一个php页面:

<noscript>
<meta http-equiv="refresh" content="0; URL=nojavascript.php">
</noscript>

您应该只构建一个AJAX查询,为启用javascript的用户设置一个会话变量

在加载站点上的任何其他信息之前运行此AJAX查询,然后执行简单的重定向到实际站点

您可以执行类似以下伪代码的操作:

Index.php:

ajax(check_js.php);
redirect(main_page.php);
检查_js.php

$_SESSION['js_enable'] = true;
main_page.php

if($_SESSION['js_enable'] == true) {
  //execute page
} else {
  header("Location: no_js_error.php");
}

您可以在一些
标记中包含一个链接,将用户指向
example.com#foo?javascript=disabled


不幸的是,浏览器不报告是否启用了JS,因此无法通过简单的HTTP GET知道是否应该发送依赖JS的页面。

与其让服务器尝试嗅探用户的设置,不如先使用?这样,如果JS不可用,页面将优雅地降级(到所需状态)。

@James Thompson-在知道启用了浏览器JavaScript之前,AJAX查询如何工作?这个想法有效,效率不如其他想法。这样你会遇到不必要的交通,但事实并非如此。如果他们禁用了JS,它将失败,因此说他们可以使用JS的页面会话变量将永远不会被设置。我不知道为什么每个人都否决了这个答案。这个答案有效,你们这些傻瓜。事实上,这个答案可能比这个答案更可靠,因为谁知道它是否在所有浏览器上都有效?这是否得到搜索爬虫的支持?爬虫会找到这个,但我不知道它们是否会进入那个URL。您可以随时告诉它是否在sitemap.xml文件中点击该文件考虑像node.js这样的服务器端javascript-好主意。不幸的是,并不是所有的服务器提供商都安装了javascript,或者至少我正在使用的服务器提供商没有安装。有些人(有屏幕阅读器或盲文阅读器的盲人、手机用户等)没有javascript。这很少见,但重要的是要知道。