我想要做的是根据JS是否启用,有一个页面提供不同的标记。 我的想法是在初始页面加载中提供一组基本内容。当页面正在加载时,还会有一些javascript函数向服务器提交ajax调用,其中包含发布数据,让服务器知道javascript已启用。完成ajax调用后,页面将使用post数据再次刷新/服务,以了解JS已启用并提供基本内容以及启用JS的内容。我的目标是使其尽可能无缝。
* 编辑:我应该添加我想保留一个页面。所以页面只会刷新JS内容。不会重定向到新页面。
我的问题是双重的,这是否可能,如果是这样,我可以在我需要的代码上获得一些方向吗?
答案 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,直到你得到它的信息为止。