5

我正在构建一个 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或之类的页面(这与 PHP 的观点example.com#foo基本相同,因为根据定义,片段不会发送到服务器)空白(只是可视模板),其中包含主页内容的标签。这样,使用 javascript 的用户将看不到主页,而 AJAX 将根据片段填充页面的内容。另一方面,搜索爬虫和没有 javascript 的用户会看到一个主页。example.com<noscript>#foo

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

4

5 回答 5

5

你不能用 PHP 做到这一点。如果他们没有 javascript,你可以做的是使用 noscript 标签重定向到另一个 php 页面:

<noscript>
<meta http-equiv="refresh" content="0; URL=nojavascript.php">
</noscript>
于 2010-11-16T18:15:34.790 回答
1

您可以在一些标签内包含一个链接<NOSCRIPT>,将用户指向类似example.com#foo?javascript=disabled.

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

于 2010-11-16T18:16:56.803 回答
1

以您尝试的方式完成此操作是不可能的。

很少有人关闭了 JS 却不知道。

# 之后 PHP 不会传递任何东西,只有 javascript 可以做任何事情。因此,即使 PHP 可以确定浏览器是否打开了 javascript,它仍然无法读取 # 无论如何。

于 2010-11-16T18:12:19.533 回答
0

与其让服务器尝试嗅探我们的用户设置,不如一开始就使用不显眼的 javascript呢?这样,如果 JS 不可用,页面将优雅地降级(到所需的状态)。

于 2010-11-16T18:17:48.093 回答
0

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

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

你可以做这样的伪代码:

索引.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");
}
于 2010-11-16T18:15:43.963 回答