zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》学习笔记——BOM

    Author:Chemandy

    第8章 BOM

    1. window对象 

    1)基本概念

    ①window对象既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。

    ②window对象为Global对象的角色,全局作用域中声明的变量,函数都会变成window对象的属性和方法。

    2)窗口关系及框架

    ①在使用框架的情况下,浏览器会存在多个Global(window)对象。窗体一个,各个框架一个。

    ②访问框架:window.frames[0],window.frames["framename"},top.frames[0],top.frames["framename"],frames[0],frames["framename"]

    □ 建议使用top对象访问,因top对象始终指向最高(最外)层的框架,也就是浏览器窗口。

    □ parent对象始终指向当前框架的直接上层框架。

    □ self对象,它始终指向window,可以与window呼唤。

    3)窗口位置

    属性及方法很多,需考虑各兼容性。

    var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;

    var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;

    使用moveTo()和moveBy()有可能将窗口精确地移动到新位置(这两方法有可能被禁用)。

    4)窗口大小

    ①跨浏览器无法取得窗口大小,只能取得页面视图大小。

    var pageWidth = window.innerWidth, pageHeight = window.innerHeight; //对ff、chrome、Safari、Opera

    if(typeof pageWidth != "number"){ //对IE

    if(document.compactMode == "css1Compact"){

    pageWidth = document.documentElement.clientWidth;

    pageHeight = document.documentElement.clientHeight;

    }else{

    pageWidth = document.body.clientWidth;

    pageHeight = document.body.clientHeight;

    }

    }

    ②调整窗口大小

    resizeTo()和resizeBy(),可能会被禁用。

    5)导航和打开窗口

    ①使用window.open()方法既可以导航到一特定URL,也可以打开一个新窗口。

    □ 参数1:要加载的URL

    □ 参数2:窗口目标。若该参数是已有窗口或框架的名称,那么就会在具有该名称的窗口或框架中加载第一个参数指定的URL。

    □ 参数3:打开新窗口的特性设置。(一个特性字符串)

    □ 参数4:表示新页面是否取代浏览器历史记录中当前加载页面的布尔值。

    ②通过window.open()打开的窗口有一个指向打开他的原始窗口的属性指针opener。

    ③通过window.open()通过window.open()打开的窗口可以通过close()关闭。

    ④检测window.open()打开的窗口是不是屏蔽了。

    var blocked = false;

    try{

    var wroxWin = window.open("http://…","_blank");

    if(wroxWin == null){

    blocked = true;

    }

    }catch(ex){

    blocked = true;

    }

    if(blocked){

    alert("The popup was blocked!");

    }

    6)间歇调用和超时调用

    ①超时调用,使用window对象的setTimeOut()方法。

    □ 接受两个参数:要执行的函数和毫秒时间。

    □ 方法返回一个数值ID,可通过ID取消尚未执行的超时调用clearTImeOut(ID)

    ②间歇调用

    □ setInterval(),与超时调用基本相同,经过一定时间重复调用。

    □ 返回一个ID,通过clearInterval(ID)取消调用。

    ③最好不用间歇调用,易出问题。使用超时调用来模拟间歇调用时一种最佳模式。

    7)系统对话框

    ①三种alert()、confirm()和prompt()

    □ confirm():提供“确认”和“取消”按钮,返回布尔值。

    □ prompt():接受两个参数,要显示给用户的文本提示和文本输入域的默认值。用户点击OK则返回输入的文本值,否则返回null

    □ window.print()显示打印框;window.find()显示查找框。

    □ confirm()和prompt()是阻塞的,执行时页面其他代码无法运行,需等待用户答应。

    2. location对象

    1)location对象:

    □ 提供了与当前窗口中加载的文档有关的信息,还有一些导航功能。

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

    □ location对象将URL解析为独立片段:

    ◇hash、host、hostname、href、pathname、port、protocol、search

    2)位置操作

    □ 打开新URL并在浏览器的历史记录中生成一条记录,显/隐式调用assign()

    location.assign("http://#");

    window.location = "http://#";

    location.href = "http://";(最常用)

    □ 修改location对象的其他属性(hash、search、hostname等)也可以改变当前加载的页面。

    □ replace()方法,用法,效果如assign(),但不在历史记录中生成新记录,用户不能回到前一页面。

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

    3. navigator对象

    1)其中的很多属性和方法都用于检测显示网页的浏览器类型。(不可靠)

    2)检测插件:

    ①在非IE浏览器中,可以使用plugins数组检测插件。

    □ name:插件的名字

    □ description:插件的描述

    □ filename:插件的文件名

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

    function hasPlug(name){

    name = name.toLowerCase();

    for(var i= 0; i < navigator.plugins.length; i++){

    if(navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){

    return true;

    }

    }

    return false;

    }

    ②在IE中检测插件的唯一方式就是使用专有的ActiveXObject类型,并尝试创建一个特定插件实例。

    function hasIEPlugin(name){

    try{

    new ActiveXObject(name);

    return true;

    }catch(ex){

    return false;

    }

    }

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

    fucntion hasFlash(){

    var result = hasPlugin("Flash");

    if(!result){

    result = hasIEPlugin("Shockwave Flash.Shockwin");

    }

    return result;

    }

    3)注册处理程序

    ①registerContentHandler()让一个站点指明它可以处理特定类型的信息。

    □ 三个参数:要处理的MIME类型、可处理该MIME类型的URL及应用程序名。

    ②registerProtocolHandler():

    □ 三个参数:要处理的协议类型,可处理该协议类型的URL及应用程序名。

    4. screen对象:用来表明客户端能力,其中包括浏览器窗口外部的显示器信息。

    5. history对象

    □ 对象保存着用户上网的历史记录

    □ go()方法,接受一个参数,数字或字符串

    ◇ 负值表向后退,正值表向前进。

    ◇ 字符串,浏览器会跳转到包含该字符串的第一个位置。

    □ 可用简写方法back()和forward()代替go()

    第九章 客户端检测

    不到不得已就不要使用客户端检测,先设计最通用的方案,然后使用特定于浏览器的技术增强方案。

    1. 能力检测:识别浏览器能力,再做出反应。

    2. 怪癖检测:目标是识别浏览器的特殊行为。

    3. 用户代理检测:通过检测用户代理字符串来确定实际使用的浏览器。

    ①用户代理字符串:在每次http请求中,作为响应首部发送的。可通过navigator.userAgent访问。

    ②用户代理检测一般当做一种万不得已才用的做法,其优先级排在能力检测和(或)怪癖检测之后。

    ③呈现引擎:IE(Trident)、Firefox(Gecko)、Safari(WebKit)、Konqueror(KHTML)、Chorme(WebKit)、Opera(besto)

    ④用户代理检测适用情况:

    □ 不能直接准确地使用能力检测或怪癖检测。

    □ 同一款浏览器在不同平台下具备不同的能力。

    □ 为了跟踪分析等母的需要知道确切的浏览器。

  • 相关阅读:
    用位运算实现十进制转换为二进制
    【Zhejiang University PATest】02-3. 求前缀表达式的值
    【Zhejiang University PATest】02-1. Reversing Linked List
    【Tsinghua OJ】隧道(Tunel)问题
    冒泡排序及其优化
    有序向量的查找算法
    【Tsinghua OJ】灯塔(LightHouse)问题
    有序向量的去重算法
    【Tsinghua OJ】祖玛(Zuma)问题
    倒水问题(《怎样解题》中的经典问题)
  • 原文地址:https://www.cnblogs.com/chemandy/p/2141612.html
Copyright © 2011-2022 走看看