在html中使用javascript
script属性:
charset:表示通过src属性指定的代码的字符集
defer:表示脚本可以延迟到文档完全被解析和显示之后再执行
包含在script元素内部的javascript代码将从上到下依次解释
在javascript代码的任何地方不要出现“</script>”字符串,因为按照解析嵌入式代码的规则,当浏览器遇到字符串“</script>”时,就会认为那是结束的</script>标签,而通过把这个字符串分隔为两部分可解决这个问题
外部javascript文件带有js扩展名,但这个扩展名不是必需的,因为浏览器 不会检查包含javascript的文件的扩展名
带有src属性的<script>元素不应该在其<script>标签与</script>标签之间再包含额外的javascript代码
另外通过<script>元素的src属性还可以包含来自外部域的javascript文件
浏览器会按照<script>元素在页面中出现的先后顺序对它们依次进行解析
一般都把全部的javascript引用放在body元素中,放在页面的内容后面。
<script>标签定义了defer属性,表明脚本在挂靠时不会影响页面的构造,也就是说脚本会被延迟到整个页面都解析完毕后再运行,因为在<script>元素中设置defer属性( defer="defer" ),实际上与把script引用放到页面最底部的效果是一样的。(但是现在只有IE和Firefox3.1是目前唯一支持defer属性的主流浏览器)
XHTML(Extensible Hypertext Markup Language)
编写XHTML代码的要比编写html严格很多
CData片段是文档中的一个特殊区域,这个区域中可以包含不需要解析的任何格式的文本内容,因此在在html中可以出现的小于号 加上了CData片段后也可以在XHTML文档中正常运行了
如下所示:
<script type="text/javascript">
<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
]]>
</script>
在兼容XHTML的浏览器,这个方法可以解决问题,但是实际上,还有不少浏览器不兼容XHTML,因为不支持CData片段,再使用javascipt注释将CData标记注释掉就行了
如下所示:
<script type="text/javascript">
//<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
//]]>
</script>
让不支持<script>元素的浏览器能够隐藏嵌入的javascript代码, 这个方案就是把javascript代码包含在一个html注释中,
如下所示
<script type="text/javascript">
<!--
function sayHi() {
alert('Hi');
}
//-->
</script>
其实作用外部文件比嵌入代码的优势主要体现在可维护性及可缓存(如果两个页面都作用同一个外部文件的话,那么这个文件只须下载一次)这两方面
文档模式:混杂模式与标准模式
<noscript>元素中的内容只有在浏览器不支持脚本或者浏览器支持脚本但脚本被禁用。浏览器支持脚本,也启用脚本的情况下,不会出现noscript元素中的任何内容
eg:
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript</p>
</noscript>