热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高程8.2location对象8.3navigator对象

8.2location对象location对象既是window对象的属性,也是document对象的属性.window.location和document.location引用的是同一个对象.

8.2location对象

location对象既是window对象的属性,也是document对象的属性.

window.location和document.location引用的是同一个对象.

属性名 例子 说明
hash “#contents” 返回URL中的hash(#号后跟零或多个字符),如果URL中不包含散列,则返回空字符串
host “www.baidu.com:80” 返回服务器名称和端口号(如果有)
hostname “www.baidu.com” 返回不带端口号折服务器名称
href “http:/www.baidu.com” 返回当前加载页面的完整URL.而location对象的toString()方法也返回这个值
pathname “WileyCDA” 返回URL中的目录和(或)文件名
port “8080” 返回URL中指定的端口号.如果URL中不包含端口号,则这个属性返回空字符串
protocol “http:” 返回页面使用的协议.通常是http:或https:
search “?q=Javascript” 返回URL的查询字符串.这个字符串以问号开头

 

8.2.1 查询字符串参数

location.search返回的是从问号开始(包括问号)到#号(不包括#号)之间的内容.

function getQueryStringArgs(){
        var qs=(location.search.length>0?location.search.substring(1):""),
            //保存数据的对象
            args={},
            //取得每一项
            items=qs.length?qs.split("&"):[],
            item=null,
            name=null,
            value=null,
            //在for循环中使用
            i=0,
            len=items.length;
        //逐个将每一项添加到args对象中
        for(i=0;i){
            item=items[i].split("=");
            name=decodeURIComponent(item[0]);
            value=decodeURIComponent(item[1]);

            if(name.length){
                args[name]=value;
            }
        }
        return args;
    }

8.2.2 位置操作

使用assign()方法并为其传递一个URL

location.assign(http://www.baidu.com);

这样就立即打开新URL并在浏览器的历史记录中生成一条记录.下面两行代码与显示调用assign()方法一样

window.location="http://www.baidu.com";

location.href=http://www.baidu.com;

可以通过将hash,search,hostname,pathname和port属性设置为新值来改变URL.

每次修改location的属性(hash除外),页面都会以新URL重新加载.

https://www.baidu.com/?tn=92499072_hao_pg
location.hash="#section1";//https://www.baidu.com/?tn=92499072_hao_pg#section1
location.search="?q=Javascript";//https://www.baidu.com/?q=Javascript#section1(页面刷新)
location.hostname="www.yahoo.com";//https://www.yahoo.com/?q=Javascript#section1(页面刷新)
location.pathname="mydir";//https://www.yahoo.com/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript(页面刷新)
location.port="8080";//https://www.yahoo.com:8080/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript:1 GET https://www.yahoo.com:8080/?err=404&err_url=https%3a%2f%2fwww.yahoo.com%2fmydir%3fq%3dJavascript net::ERR_CONNECTION_TIMED_OUT

replace(),只接受一个参数,即要导航到的URL,结果会导致浏览器位置改变,但不会在历史记录中生成新记录.

在调用replace()方法之后,用户不能回到前一个页面.

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <script>

    script>
head>
<body>
    <p>Enjoy this page for a second,because you won't be coming back here.p>
    <script type="text/Javascript">
    setTimeout(function(){
        location.replace("http://www.baidu.com/");
    })
    script>
body>
html>

 

reload()方法,作用是重新加载当前显示的页面.如果调用reload()时不传递任何参数,页面应付以最有效的方式重新加载.

如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中重新加载.

如果要强制从服务器重新加载,则:

location.reload();//重新加载(有可能从缓存中加载)
    location.reload(true);//重新加载(从服务器重新加载)

8.3 navigator对象

navigator对象是所有支持Javascript的浏览器所共有的.

与其他BOM对象的情况一样,每个浏览器中navigator对象都有一套自己的属性.

下面列出了存在于所有浏览器中的属性和方法,以及支持它们的浏览器版本.

属性或方法 说明 IE FF Safari/Chrome Opera
appCodeName 浏览器的名称.通常都是Mozilla,即使在非Mozilla中也是如此 3.0+ 1.0+ 1.0+ 7.0+
appMinorVersion 次版本信息 4.0+ - - 9.5+
appName 完整的浏览器名称 3.0+ 1.0+ 1.0+ 7.0+
appVersion 浏览器版本.一般不与实际的浏览器版本对应 3.0+ 1.0+ 1.0+ 7.0+
buildID 浏览器编译版本 - 2.0+ - -
COOKIEEnabled 表示COOKIE是否启用 4.0+ 1.0+ 1.0+ 7.0+
cpuClass 客户端计算机中使用的CPU类型(X86,68K,Alpha,PPC或Other) 4.0+ - - -
javaEnabled() 表示当前浏览器中是否启用java 4.0+ 1.0+ 1.0+ 7.0+
language 浏览器的主语言 - 1.0+ 1.0+ 7.0+
mimeTypes 在浏览器中注册的MIME类型数组   4.0+ 1.0+   -1.0+ 7.0+
onLine 表示浏览器是否连接了因特网 4.0+ 1.0+   - 9.5+
opsProfile 似乎早就不用了.查不到相关文档 4.0+   -   -   -
oscpu 客户端计算机的操作系统或使用的CPU   -   1.0+   -   -
platform 浏览器所有的系统平台   4.0+   1.0+   1.0+   7.0+
plugins 浏览器中安装的插件信息的数组   4.0+    1.0+    1.0+   7.0+
preference() 设置用户的首选项   -   1.5+   -   -
product 产品名称(如Gecko)   -   1.0+   1.0+   -
productSub 关于产品的次要信息(如Gecko的版本)   -   1.0+   1.0+   -
registerContentHandler() 针对特定的MIME类型将一个站点注册为处理程序   -   2.0+   -   -
registerProtocolHandler() 针对特定的协议将一个站点注册为处理程序   - 2.0+   -   -
securityPolicy 已经废弃.安全策略的名称. - 1.0+ - -
systemLanguage 操作系统的语言   4.0+ - - -
taintEnabled() 已经废弃.表示是否允许变量被修改(taint)   4.0+ 1.0+ - 7.0+
userAgent 浏览器的用户代理字符串   3.0+ 1.0+ 1.0+ 7.0+
userLanguage 操作系统的默认语言   4.0+ -   - 7.0+
userProfile 借以访问用户个人信息的对象   4.0+ -   - -
vendor 浏览器的品牌 - 1.0+ 1.0+ -
verdorSub 有关供应商的次要信息 - 1.0+ 1.0+ -
           

 

8.3.1 检测插件

对于非IE浏览器,可以使用plugins数组来检测浏览器虽是否安装特定插件.

该数组中的每一项都包含下列属性:

name:插件的名字.

description:插件的描述.

filename:插件的文件名

length:插件所处理的MIME类型数量

//检测插件(在IE中无效)
    function hasPlugin(name){
        name=name.toLowerCase();
        for( var i = 0; i  ){
            if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
                return true;
            }
        }
        return false;
    }
    //检测Flash
    console.log(hasPlugin("Flash"));

    //检测QuickTime
    console.log(hasPlugin("QuickTime"));

每个插件对象本身也是一个MimeType对象的数组,这些对象可以通过方括号语法来访问.每个MimeType对象有4个属性:包含MIME类型描述的description,回指插件对象的enabledPlugin,表示与MIME类型对应的文件扩展名的字符串suffixes(以逗号分隔)和表示完整MIME类型字符串的type.

//检测IE中的插件
    function hasIEPlugin(name){
        try{
            new ActiveXObject(name);
            return true;
        }catch(ex){
            return false;
        }
    }

    //检测Flash
    console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));

    //检测QuickTime
    console.log(hasIEPlugin("QuickTime"));

鉴于检测这两种插件的方法差别太大,因此典型的做法是针对每个插件分别创建检测函数.

//检测所有浏览器中的Flash
function hasFlash(){
    var result=hasPlugin("Flash");
    if(!result){
        result=hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
    }
    return result;
}

//检测所有浏览器中的QuickTime
function hasQuickTime(){
    var result=hasPlugin("QuickTime");
    if(!result){
        result=hasIEPlugin("QuickTime.QuickTime");
    }
    return result;
}

//检测Flash
console.log(hasFlash());

//检测QuickTime
console.log(hasQuickTime());

plugins集合有一个名叫refresh()的方法,用于刷新plugins以反映最新安装的插件.这个方法接收一个参数:表示是否应该重新加载页面的一个布尔值.如果将这个值设置为true,则会重新加载包含插件的所有页面;否则,只更新plugins集合,不重新加载页面.

8.3.2 注册处理程序

FF2为navigator对象新增了registerContentHandler()和registerProtocoHandler()方法.

registerContentHandler()方法接收三个参数:要处理的MIME类型,可以处理该MIME类型的页面的URL以及应用程序的名称.

类似的调用方式也适用于registerProtocolHandler()方法,它也接收三个参数:要处理的协议,处理该协议的页面的URL和应用程序的名称.


推荐阅读
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 本文深入解析了 JavaScript 中字符串截取的多种方法,并通过实例详细介绍了 `substring()` 和 `slice()` 函数的使用技巧。这些方法在实际开发中非常实用,能够帮助开发者高效地处理字符串数据。此外,文章还探讨了其他相关函数如 `substr()` 的应用场景,为读者提供了全面的参考。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在Bugku Web CTF实战演练中,通过细致的源代码检查,我们发现了一个隐藏的滑稽笑脸图标,进一步分析后成功找到了flag。此外,还探讨了如何利用计算器功能进行安全测试,提升了对Web漏洞的识别和利用技巧。 ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
author-avatar
岩律_619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有