代码之家  ›  专栏  ›  技术社区  ›  miki725

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

  •  5
  • miki725  · 技术社区  · 15 年前

    我正在构建一个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非分离浏览器或爬虫程序将尝试访问页面 示例.com#foo ,将返回主页。

    我在使用SWFaddress( http://www.asual.com/swfaddress/ )用于深度链接的库。


    编辑

    谢谢你们。我没想过用 <noscript></noscript> 以前。

    这是我决定要做的。默认情况下,PHP将加载如下页面 example.com网站 示例.com#foo (基本上与 example.com网站 从PHP的角度来看,因为定义上的片段并没有发送到服务器)空白(只是可视化模板) <noscript> 在内部标记主页的内容。这样,使用javascript的用户将看不到主页,AJAX将根据 #福 碎片。另一方面,搜索爬虫和没有javascript的用户将看到一个主页。

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

    5 回复  |  直到 10 年前
        1
  •  5
  •   wajiw    15 年前

    你不能用PHP来做这件事。但是,如果没有javascript,可以使用noscript标记重定向到另一个php页面:

    <noscript>
    <meta http-equiv="refresh" content="0; URL=nojavascript.php">
    </noscript>
    
        2
  •  1
  •   Ben    15 年前

    不可能用你的方式来完成这件事。

    很少有人关掉JS却不知道。

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

        3
  •  1
  •   Dancrumb    15 年前

    你可以在一些 <NOSCRIPT> 将用户指向以下内容的标记 example.com#foo?javascript=disabled .

    不幸的是,浏览器不会报告是否启用了JS,因此无法从简单的HTTP获取是否应该发送依赖JS的页面。

        4
  •  0
  •   James Thompson    15 年前

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

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

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

    Index.php文件:

    ajax(check_js.php);
    redirect(main_page.php);
    

    检查js.php

    $_SESSION['js_enable'] = true;
    

    主页.php

    if($_SESSION['js_enable'] == true) {
      //execute page
    } else {
      header("Location: no_js_error.php");
    }
    
        5
  •  0
  •   Michael Paulukonis    15 年前

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

    推荐文章