2010-11-16 62 views
5

我正在构建一个AJAX深层链接网站。PHP:如何确定浏览器是否支持PHP中的JavaScript?

我想让PHP加载页面的所有HTML代码,如果用户试图访问该网站与JavaScript不支持的浏览器或如果它是一个搜索爬虫。基本上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,则返回主页。

我正在使用SWF地址(http://www.asual.com/swfaddress/)库进行深层链接。


编辑

谢谢你们。之前我没有想到使用<noscript></noscript>

这是我决定要做的。 PHP在默认情况下将加载如example.comexample.com#foo页面(这是基本相同example.com从自定义片段PHP的观点不会被发送到服务器)与<noscript>标签内的空白(只是视觉的模板)有关内容主页。这样,使用javascript的用户将不会看到主页,并且AJAX将根据#foo片段填充页面的内容。另一方面,搜索抓取工具和没有javascript的用户将会看到一个主页。

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

+0

考虑服务器端JavaScript像node.js - http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/ – ajreal 2010-11-17 05:42:59

+0

好主意。不幸的是,并非所有的服务器提供商都安装了它,或者至少我没有使用它。 – miki725 2010-11-17 15:00:23

回答

5

你不能这样做使用PHP。你虽然可以做的是使用非脚本标记重定向到另一个PHP页面,如果他们不具备的javascript:

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

是否支持搜索爬虫? – miki725 2010-11-16 20:39:39

+0

爬行者会挑选这个,但我不知道他们是否会进入该URL。你总是可以告诉它是否在sitemap.xml文件中打该文件 – wajiw 2010-11-16 20:54:26

1

这是不可能的,你试图做到这一点。

很少有人关闭了JS并且不知道它。

PHP在#后没有被传递任何东西,只有javascript可以做任何事情。所以,即使PHP可以确定浏览器是否打开了javascript,它仍然无法阅读#反正。

+0

有些人(带屏幕阅读器或盲文阅读器的盲人,手机用户等)没有javascript。 – trusktr 2011-04-30 17:31:57

+0

这很少见,但很重要。 – trusktr 2011-04-30 17:32:14

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"); 
} 
+0

@James Thompson - 在知道浏览器JavaScript启用之前,AJAX查询如何工作? – ajreal 2010-11-16 18:23:43

+0

这个想法很有效,效率不如其他。这样就会产生不必要的流量。 – 2010-11-16 18:33:19

+0

它没有。它会失败,如果他们有JS禁用,因此页面会话变量说他们可以使用JS永远不会被设置。 – 2010-11-16 21:25:11

1

你可以包括一个链接里面有一些<NOSCRIPT>标签,用户指向example.com#foo?javascript=disabled之类的东西。

不幸的是,浏览器不报告JS是否启用,所以无法从简单的HTTP GET中知道您是否应该发送JS依赖页面。

0

而不是服务器试图嗅探我们的用户的设置,如何使用unobtrusive javascript摆在首位?这样,如果JS不可用,页面将优雅地降级(到期望的状态)。

相关问题