如果启用了JavaScript,是否可以根据某些PHP提供服务?

时间:2011-07-12 17:13:48

标签: php javascript ajax post

我想要做的是根据JS是否启用,有一个页面提供不同的标记。 我的想法是在初始页面加载中提供一组基本内容。当页面正在加载时,还会有一些javascript函数向服务器提交ajax调用,其中包含发布数据,让服务器知道javascript已启用。完成ajax调用后,页面将使用post数据再次刷新/服务,以了解JS已启用并提供基本内容以及启用JS的内容。我的目标是使其尽可能无缝。

* 编辑:我应该添加我想保留一个页面。所以页面只会刷新JS内容。不会重定向到新页面。

我的问题是双重的,这是否可能,如果是这样,我可以在我需要的代码上获得一些方向吗?

4 个答案:

答案 0 :(得分:3)

您要做的是在容器内加载'non javascript'标记,例如<div id="container"> DEFAULT/FALLBACK MARKUP HERE </div>。然后,在准备好文档时,进行ajax调用以获取“启用javascript”标记并使用它填充#container div。只有在打开javascript时才会填充它:)

示例:

$(function(){

    $.ajax({
        url:'/javascript_enabled_html.php',
        dataType:'html',
        /* set your other params...*/
        success:function(data){
            $('#container').html(data);
        }
    });
});

答案 1 :(得分:2)

服务器端脚本无法访问此信息,因为它不与HTTP标头一起传递。 interesting solution I just found将有两页。第一个有一个javascript-fired重定向到第二页。因此,如果他们正在访问第二页,您就知道他们已启用了javascript。

另一种解决方案依赖于无效的HTML,可能无法在所有浏览器上运行。使用<noscript>标记并在其中放置元刷新元素,如下所示:

<noscript>
   <meta http-equiv="refresh" content="0; url=http://example.com/nojavascript.php">
</noscript>

然后在javascript中指向javascript页面的另一个重定向被触发onload。如果它转到nojavascript.php它们没有启用js,如果转到第二个,它们就会启用。

但我会假设他们没有打开它,除非他们被js重定向,并相应地构建第一页。

答案 2 :(得分:2)

你不能一步完成,但如果你不介意中间页,你可以这样:

<noscript>
   <img src="js-is-disabled.php" />
</noscript>

JS-是-disabled.php:

<?php
session_start();
$_SESSION['js_is_off'] = true;

这样可以在任何已禁用JS的浏览器上运行,只要它足够现代,可以识别<noscript>标记。

另一种方法是让一小段JS触发AJAX请求来调用脚本,该脚本将JS标记为在会话中可用。这可能会更可靠,因为如果JS工作正常,你只会发生这种情况。

答案 3 :(得分:0)

它可以但不应该。 假设JS,你应该服务的唯一页面是使用Ajax调用的页面。

如果你真的需要知道(通常不会发生这种情况),你应该假设JS是OFF,直到你得到它的信息为止。