作为一个标准的HTML文档,网页标题(title)是必不可少的属性。随着浏览器的发展,我们又多了一种访问和修改文档的方式:DOM。所以我们获取网页标题的方式大致可分为以下两种:

  1. 通过document对象访问title
    var title = document.title;
  2. 通过DOM方式访问title
    var title = document.getElementsByTagName('title')[0];

但是这两种获取方式是截然不同的,document.title这种方式可以直接获得网页标题的字符串副本,它返回一个字符串;然而通过DOM方式获取的则是HTML文档中的title结点对象。

  • var TOSTRING = Object.prototype.toString;
    alert(TOSTRING.call(document.getElementsByTagName('title')[0]));// output [object Object]
    alert(TOSTRING.call(document.title)); // output [object String]

我们可以利用结点对象的innerHTML属性输出网页标题:
document.getElementsByTagName('title')[0].innerHTML;
修改网页标题
此处我们讨论IE浏览器在实现时的一个小Bug:我们知道,理论上可以通过DOM修改HTML文档中的任何一个节点,按照这句话,我们当然可以修改HTML文档中的title节点了。但有趣的是,IE浏览器在这个地方实现的比较怪异,具体为:

  • IE中不能通过document.getElementsByTagName('title')[0].innerHTML来修改title节点内部的子节点,任何试图通过DOM修改网页标题的方法在IE下都将会引发“未知的运行时错误”的异常
  • IE视title节点下不存在任何子节点,即其子节点长度为0,即
    document.getElementsByTagName('title')[0].childNodes.length; // output 0
    但是其innerHTML属性却能正确地返回网页的标题内容

Firefox在此处表现非常完美。不过除FF和IE,其他的浏览器我没有测试过,感兴趣的朋友可以尝试着去试试。(估计都会比IE表现的要好^^)
有句话说的好,老方法不一定就过时,存在多年的document.title在这时凸显了它的优势,因为这个属性既能获取网页标题也能修改标题,同时HTML文档中的title节点也会同步地更新。所以:

  • document.title = "new title";
    alert(document.getElementsByTagName("title")[0].innerHTML == "new title");// output true

目前对于IE浏览器而言,唯一修改网页标题的方式就是使用document.title这种古老而不过时的方法。同时,这种方法对于其他浏览器也同样适用。

结论
在web开发中,若要处理网页标题的问题,需要注意一下几点:

  • 在现实世界中利用document.title来处理所有关于获取和修改网页标题的需求,以实现跨浏览器
  • 当网页中有定义多个title元素时(当然这是错误的做法,但浏览器并不会报错),无论哪种使用哪种方法获取网页标题,只有按照DOM文档结构或是文档流的顺序查找所遇到的第一个title元素是有效的标题
  • IE错误地认为title节点下无任何子节点,而利用innerHTML属性却可以正确获取文档标题
  • 对于IE浏览器,无法通过DOM方式去修改文档标题,任何试图通过DOM修改网页标题的方法在IE下都将会引发“未知的运行时错误”的异常

最佳实践
获取文档标题:var title = document.title;
修改文档标题:document.title = "new title";

HTML-获取/修改html页面标题的更多相关文章

  1. [Android] 获取WebView的页面标题(Title)-----WebChromeClient.onReceivedTitle()方法的重写

    应用开发中需要获取WebView当前页面的标题,可能通过对WebChromeClient.onReceivedTitle()方法的重写来实现 效果图如下: 代码如下: public class Mai ...

  2. django学习-26.admin管理后台里:修改登录页面标题,修改登录框标题,修改首页标题

    目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看[site.py]的源码 2.2.第二步:在应用[hello]所在目录里的[admin.py]里重写三个属性的属性值 2.3.第三步:重启服 ...

  3. destoon修改搜索页面标题方法

    最近研究destoon内核开发,发现destoon6.0的搜索页面模块的标题太长,是搜索标题+模块+首页标题,这样导致标题过长,百度不喜欢,所以我经过修改成百度所喜欢的. 修改前截图: 修改的文件:/ ...

  4. 客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值。

    客户端的javascript改变了asp.net webform页面控件的值,后台代码中如何获取修改后的值.     无论是什么的html控件,只要加上了runat="server" ...

  5. 微信小程序动态修改页面标题setNavigationBarTitle

    微信小程序是可以动态修改页面标题的. 首先我们来看看静态是怎么实现的 在对应页面的json文件里面加入下面代码就可以实现了 { "navigationBarTitleText": ...

  6. vue.js 使用 vue-router 修改页面标题

    module.exports = { name: 'myComponent', data: {} route{ data: function(){ document.title = "页面标 ...

  7. 小程序动态修改页面标题setNavigationBarTitle

    可以使用setNavigationBarTitle方法动态设置页面标题 wx.setNavigationBarTitle({ title: options.name, })

  8. vue-element-admin中是如何配置浏览器中的页面标题

    因为在vue-element-admin中杈哥是写个一个动态路由标题,就是说你点进那个页面,它会显示对应页面的标题,所以我们仅仅在index页面进行修改是没有用的,那么我们改如何修改呢? 找到perm ...

  9. curl 或 file_get_contents 获取需要授权页面的方法

    原文:http://blog.csdn.net/fdipzone/article/details/44475801 红色字体部分是加上自己的注释,整理了一下. 今天因工作需要,需要用 curl / f ...

随机推荐

  1. 转:php防止sql注入的一点心得

    转:http://blog.csdn.net/sky_zhe/article/details/9702489 转:http://zhangxugg-163-com.iteye.com/blog/183 ...

  2. NBUT 1221 Intermediary

    最短路,三进制状态压缩. $dis[i][j]$表示到$i$节点,每个中介用了几次的情况下的最小花费,跑最短路即可. #include<cstdio> #include<cstrin ...

  3. FastReport.Net使用:[35]奇偶行

    文本控件类型的奇偶行数据实现(普通) 1.普通的奇偶行数据主要使用报表对象的EvenStyle(偶数行样式)属性实现. 首先通过 报表-->样式 菜单打开样式编辑器,编辑几个备用样式. 样式的编 ...

  4. FastReport.Net使用:[18]形状(Shape)控件用法

    FastReport中,如果要画一张漂亮的报表,经常会画些形状控件来美化?那么如何用好形状(Shape)控件呢? 形状的5种类型 在工具栏的图形控件下拉菜单中有5种类型(矩形.圆角矩形.椭圆形.三角形 ...

  5. [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举

    [APIO2015]巴厘岛的雕塑  题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...

  6. [BZOJ4551][TJOI2016&&HEOI2016]树(并查集)

    4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1746  Solved: 800[Sub ...

  7. 【可持久化并查集】BZOJ3673-可持久化并查集 by zky

    颓了十多天别问我再干嘛,在补学校作业 啊,开学了……我的夏天…… [题目大意] n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b ...

  8. bzoj 1009: [HNOI2008]GT考试 -- KMP+矩阵

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...

  9. Mac 显示隐藏的文件

    要显示隐藏文件: 在终端中输入代码:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏文件: 在终端输入代码:default ...

  10. Linux知识(5)----LINUX下GDB调试

    命令 解释 示例   file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample     r c Run的简 ...