我最近在有趣的设计和内容的网站上进行了"观察源"狂欢.其中一个网站Squarespace在<script>标签内部有<noscript>标签块,如下所示:
<!-- Page is at: http://squarespace.com -->
...
...
<noscript id="inline-deps">
<link rel="stylesheet" type="text/css" href="//cloud.typography.com/7811972/758964/css/fonts.css" />
<script type="text/javascript" src="https://static.squarespace.com/static/ta/5134cbefe4b0c6fb04df8065/7400/assets/logomark/logomark.min.js?37"></script>
<link rel="stylesheet" href="https://static.squarespace.com/static/ta/5134cbefe4b0c6fb04df8065/7400/assets/logomark/logomark.min.css?37" type="text/css" />
</noscript>
...
...
Run Code Online (Sandbox Code Playgroud)
它让我感到很奇怪,并让我谷歌搜索信息,看看是否有某种隐藏的功能/目的这样奇怪的HTML,但无济于事.<script>在<noscript>元素中使用标记是否有某种目的,或者这只是坏HTML的一个例子?
HTML中是否有标记只在启用JavaScript时才显示其内容?我知道<noscript>相反的方式,在JavaScript关闭时显示其HTML内容.但我想只在JavaScript可用的情况下在网站上显示一个表单,告诉他们为什么如果没有它就不能使用该表单.
我知道如何执行此操作的唯一方法是使用document.write();脚本标记中的方法,对于大量HTML来说,它似乎有点混乱.
我在这里发现了一些好消息:
noscript元素仅检测浏览器是否启用了JavaScript.如果在防火墙中而不是在浏览器中禁用JavaScript,则JavaScript将不会运行,并且不会显示noscript元素的内容.
许多脚本依赖于所支持语言的特定功能或特性,以便它们能够运行(例如document.getElementById).如果不支持所需的功能,则JavaScript无法运行,但由于支持JavaScript本身,因此不会显示noscript内容.
使用noscript元素最有用的地方是在页面的头部,它可以有选择地确定在页面加载时应用于页面的样式表和元元素,而不必等到页面加载.不幸的是,noscript元素仅在页面主体内有效,因此不能在头部使用.
noscript元素是块级元素,因此只能在禁用JavaScript时显示整个内容块.它不能用于内联.
理想情况下,网页应使用HTML作为内容,使用CSS作为外观,使用JavaScript作为行为.使用noscript元素是在HTML中应用行为而不是从JavaScript应用它.
资料来源:http://javascript.about.com/od/reference/a/noscriptnomore.htm
我非常同意最后一点.有没有办法制作和添加外部<noscript>文件?如果我们把<noscript>在<head>?
当用户禁用JavaScript或使用像Noscript这样的脚本阻塞插件时,我一直在使用noscript标记来显示警告.如果禁用JavaScript,网站将无法正常运行,并且用户可能无法在没有警告的情况下找出无法正常工作的原因.
在最新的Google算法改组后,我看到每日流量下降到前几个月的1/3左右.我还看到在SERPS中排名第一或第二的页面从结果中退出.在对网站管理员工具进行一些调查之后,我注意到"JavaScript"在关键字部分列为#16.这没有任何意义,因为该网站与JavaScript无关,而且该单词出现的唯一位置是noscript标签之间的文本.
似乎Google现在包含并索引noscript标签之间的内容.我不相信以前发生过这种情况.警告是三句话.我想在网站的每一页顶部出现相同的三个句子可能会对搜索引擎优化造成破坏性影响.
你认为这可能导致SEO问题吗?并且,是否有任何其他方法可以向以不会被搜索引擎索引或读取的方式禁用JavaScript的用户提供警告?
通常,当加载页面并且浏览器禁用了Javascript时,我们使用<noscript>标记写出类似警告的内容并告诉客户端启用Javascript.然而,Facebook的,甚至后加载页面启用了JS,它禁止你得到通知的那一刻.我怎么能这样做?
更新:这个机制在Facebook上已经不再可用了,但是之前,我提出这个问题已经太迟了,但如果找到任何答案,我会非常感激.
我想在我的页面中有一个段,一直在检查Javascript是否被禁用,如果是,则显示内容<noscript>.
为实现这一目标,我创建了一个CheckJS.html页面.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0">
</head>
<body>
<noscript>
JS is disabled!
</noscript>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这个页面将继续刷新,当JS被禁用时,JS被禁用!会出现.
在我的原始页面中添加此页面.我尝试了以下方法:
1- .load()
我在里面使用了JQuery.然而,似乎只加载的内容的CheckJS.html.意味着元素及其内部的内容不会被加载到内部..load('CheckJS.html')div.load()<body><head>div
2- iframe
经过一番搜索,我发现,加载的唯一可能途径FULL HTML页面,包括<head>是使用<iframe>.
<iframe src="CheckJS.html"></iframe>
Run Code Online (Sandbox Code Playgroud)
然而,<meta http-equiv="refresh" content="0">中CheckJS.html影响父页面,原来的页面本身开始让人耳目一新.
如果我们能够在<iframe>不强制原始页面刷新的情况下使用它,那么这可能是一个解决方案,但即使找到了这个解决方案,我觉得它更像是一个技巧而不是一个真正的解决方案.
UPDATE
安东尼的回答证明我iframe刷新原始页面是错误的,浏览器显示它的刷新,但实际上它不是,如果就是这样,那么可以避免使用Javascript …
当我noscript在Chrome中查看时,我看到JavaScript关闭时会显示原始html.
这个:
<!DOCTYPE html>
<head></head>
<body>
<noscript>
<div>No Javscript</div>
</noscript>
</body>
Run Code Online (Sandbox Code Playgroud)
将显示:
<div>No Javscript</div>
Run Code Online (Sandbox Code Playgroud)
这曾经工作,所以我猜测有一个回归,但我在网上找不到任何关于它的东西.在其他浏览器(safari,firefox)中,我没有看到HTML.我在OS X 10.7.5上使用Chrome 26.0.1410.43
我正在尝试<noscript>使用Javascript 获取标记的内容.我成功地设法在FF,Chrome,Opera甚至IE6中获得它但在IE7上失败(尚未尝试过IE8 +).
基本上,这是减少代码版本:
<noscript>Lorem ipsum</noscript>
<script>
var noscript = document.getElementsByTagName('noscript')[0];
noscript.textContent; // undefined
noscript.innerHTML; // empty string
noscript.childNodes.length; // 0
</script>
Run Code Online (Sandbox Code Playgroud)
我尝试在里面添加元素并定位它们,但没有成功.我试图包装一个父元素并获取它.innerHTML,但<noscript>标签之间的任何东西都被丢弃了.
注意:我正在构建一个lazyloader脚本,该<noscript>元素正是我需要的(浏览器不会获取标记<img> src内的属性<noscript>.)
比方说,我有这样的HTML代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
This is content.
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想在<noscript>那里添加一个标签.这意味着,如果禁用JavaScript,它将显示为空白页面.
只有在禁用JavaScript时,它才会显示"这是内容文本".
请给我一些实例来实现.谢谢.
我正在尝试在HAML文件中添加一些内联CSS.我以为
%noscript
:css
.pagecontent {display:none;}
Run Code Online (Sandbox Code Playgroud)
会产生:
<noscript>
<style type="text/css">
/*<![CDATA[*/
.pagecontent {display:none;}
/*]]>*/
</style>
</noscript>
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.因为它遗漏type="text/css"并产生:
<noscript>
<style>
/*<![CDATA[*/
.pagecontent {display:none;}
/*]]>*/
</style>
</noscript>
Run Code Online (Sandbox Code Playgroud)
我可以使用蛮力,%style(type="text/css")但HAML的:css过滤器似乎应该更"优雅"?!?或者,我错过了什么(我很少处理内联CSS)并且type不再需要了?!?
所以我想一个简单的方法来处理浏览器禁用的javascript将如下:
<head>
<title>JavaScript Test</title>
<noscript>
<meta http-equiv="Refresh"
content="1;url=nojs.html" />
</noscript>
</head>
Run Code Online (Sandbox Code Playgroud)
并且具有nojs.html有类似:
<p>Return to <a href="jstest.html">test</a> after enabling javascrpt.</p>
Run Code Online (Sandbox Code Playgroud)
在崩溃页面.
这不是我首选的方法,但它很好很简单,直到可以为没有javascript的用户设计出更优雅的东西.
但是,<noscript>在该head部分中放置一个元素是无效的.当然,初步测试仍然有效,但是当我的代码有效时,我很迷信,而且我讨厌实际上无法进行现场测试.
那么有一种有效的方法吗?也许包装noscript在另一个元素中,就像对象标签一样?或者更简单的一些我没想到的方式?