我正在开发一个默认情况下通过AJAX加载内容的项目。
我希望它检查用户(或SE bot)是否已禁用JS,如果是,则通过PHP静态显示内容。
有办法做到这一点吗?我不认为noscript标签可以在这里工作,因为页面对于非JS用户或机器人来说是空的。
同样重定向到不同的页面对我来说没有意义,因为搜索引擎不会考虑到原始页面的链接,因为它们将被重定向而无法索引该页面
答案 0 :(得分:4)
当用户没有JavaScript时,没有办法自动更改为其他页面。
我要做的是将非JS版本显示为默认版本,但在每个页面上都有一个脚本重定向到AJAX版本并设置一个cookie,以便从那时起所有页面立即显示AJAX版本。哦,最好保留一个带有非AJAX版本链接的noscript标签,以防出现任何问题,例如已经有cookie禁用JavaScript的人。
答案 1 :(得分:2)
unobtrusive JS怎么样?您可以将普通的html页面设为默认页面,然后使用JS隐藏或替换您喜欢的AJAX控件的笨拙位。每个视图最终只有一个页面可以自动动态升级。网址也可以安全传播。
答案 2 :(得分:1)
您可以使用<noscript>
html标记。
所有主流浏览器都支持该标记。这包括IE,Firefox,Opera,Chrome和Safari。
这是一个正常的例子:
<script type="text/javascript">
document.write("Hello World!")
</script>
<noscript>Your browser does not support JavaScript!</noscript>
以下是使用<meta>
重定向代码的变体,该代码将重定向不支持javascript的浏览器(已测试并正常工作):
<script type="text/javascript">
document.write("Hello World!")
</script>
<noscript>Please wait while you're being redirected to the no-script version...
<META http-equiv="refresh" content="1;URL=http://yoursite/index.php?version=noscript">
</noscript>
答案 3 :(得分:1)
下面要考虑两种方法:( CSS显示或删除DOM节点)
1) CSS:
考虑以JS为条件的各种节点的css显示控件。
Onload,JavaScript可以将相关元素的显示样式更改为“none”。
在onload init函数中,设置:elObj.style.display:none;
。
添加noscript链接或通知,以便根据您告诉他们没有看到的内容,完全禁用JavaScript的人可以选择是否启用它。
OR
2) 节点提取:
第二个选择是让JavaScript实际删除冗余节点onload。
例如,你可能有一个要移除的granddaddy容器分区,它有一个已知的id,说“nonjs”。
我用来从内存中删除它们的函数:
XDOM.deleteNode = function(node) {
if (!node || typeof node != "object") {return;}
var trashcan = XDOM.getElementById('xdomtrashcan');
if (!trashcan) {
trashcan = document.createElement('DIV');
// quick and dirty property set:
trashcan.id = 'xdomtrashcan';
trashcan.style.display = 'none';
document.body.appendChild(trashcan);
}
trashcan.appendChild(node);
trashcan.innerHTML = ""; //empty the trash
};
答案 4 :(得分:0)
如果您有一个“主页”或用户导航的其他某个页面,您可以添加一些javascript来设置Cookie。 当用户选择目标页面时,您可以生成纯HTML或AJAXy页面,具体取决于cookie是否已设置。
对此的一种看法是发布“登陆”页面的URL地址,该页面使用“onload”脚本设置(或不设置)cookie,并将HTML重定向到包含数据的页面。