• [问题求助] 软电话转接座机功能
    软电话转接座机号的功能应该调用哪个接口?可以支持先输入坐席号,电话拨打通后再输入分机号吗?
  • [技术干货] HTML5 WebSocket技术使用详解
    WebSocketWebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客服端的浏览器,这种方式有一个很大的弊端,就是会占用很多的带宽。最新的轮询效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。使用WebSocket,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者之间就直接可以数据互相传送。而且它为我们实现即时服务带来了两大好处:节省资源:互相沟通的Header是很小的-大概只有 2 Bytes。推送信息:不需要客户端请求,服务器可以主动传送数据给客户端。socket.ioSocket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。socket.io的特点易用性:socket.io封装了服务端和客户端,使用起来非常简单方便。跨平台:socket.io支持跨平台,这就意味着你有了更多的选择,可以在自己喜欢的平台下开发实时应用。自适应:它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5。WebSocket 安装部署1npm install socket.io服务监听socket.io的服务端启动非常的简单,引用socket.io模块。1var io = require('socket.io');然后调用listen函数,传入监听的端口号,开始服务监听。启用了80端口用于测试:1var io = require('socket.io')(80);注册事件12345io.on('connection', function (socket) {  socket.on('disconnect', function () {   })})connection事件在客户端成功连接到服务端时触发,有了这个事件,我们可以随时掌握用户连接到服务端的信息。当客户端成功建立连接时,在connection事件的回调函数中,我们还是可以为socket注册一些常用的事件,如:disconnect事件,它在客户端连接断开是触发,这时候我就知道用户已经离开了。WebSocket 启动服务目前为止,我们已经搭建好了一个最简单的socket服务器,为了在浏览器中能够访问到我们的服务,我们还需要在服务端搭建一个简单的web服务器,让浏览器能够访问我们的客户端页面。为了便捷,我们选用node.js中常用的express框架来实现web服务,示例如下:1234567891011var express = require('express');var app = express();app.get('/', function (req, res) {  res.status(200).send('成功连接!')});var server = require('http').createServer(app);var io = require('socket.io')(server);io.on('connection', function (socket) { });server.listen(80);WebSocket 客户端引用服务端构建完毕,下面看一看客户端应该如何使用。服务端运行后会在根目录动态生成socket.io的客户端js文件,客户端可以通过固定路径/socket.io/socket.io.js添加引用。首先添加网页index.html,并在网页中引用客户端js文件:1<script src="//cdn.bootcss.com/socket.io/2.0.2/socket.io.js"></script>WebSocket 连接服务当客户端成功加载socket.io客户端文件后会获取到一个全局对象io,我们将通过io.connect函数来向服务端发起连接请求。1234567var socket = io.connect('/');socket.on('connect',function(){  //连接成功});socket.on('disconnect',function(data){  //连接断开});connect函数可以接受一个url参数,url可以socket服务的http完整地址,也可以是相对路径,如果省略则表示默认连接当前路径。与服务端类似,客户端也需要注册相应的事件来捕获信息,不同的是客户端连接成功的事件是connect。了解了客户端如何使用,下面我们创建网页index.html,并添加如下内容(保存):123456789101112131415<html><head>  <script src="//cdn.bootcss.com/socket.io/2.0.2/socket.io.js"></script>  <script>    window.onload = function(){      var socket = io.connect('/');      socket.on('connect',function(){        document.write('连接成功!');      });    };  </script></head><body></body></html>页面添加完毕还要记得在服务端app.js中为它添加路由,让我们可以访问测试网页:123app.get('/index',function(req,res){  res.sendFile('index.html',{root:__dirname});});WebSocket 实时通讯服务端和客户端都构建完毕了,下面开始发送消息。当我们成功建立连接后,我们可以通过socket对象的send函数来互相发送消息,示例-客户端向服务端发送消息(index.html):12345678var socket = io.connect('/');socket.on('connect',function(){  //客户端连接成功后发送消息'hello world!'  socket.send('hello world!');});socket.on('message',function(data){  alert(data);});连接成功后,我们向服务端发送消息hello world!,还为socket注册了message事件,它是send函数对应的接收消息的事件,当服务端向客户端send消息时,我们就可以在message事件中接收到发送过来的消息。服务端向客户端发送消息也可以通过send的方式,示例 - 服务端向客户端发送消息(app.js):1234567var io = require('scoket.io');io.on('connection', function (socket) {  socket.send('Hello World!');  socket.on('message', function (data) {    console.log(data);  })});与客户端相同,服务端也需要为socket注册message事件来接收客户端发送过来的消息。WebSocket 发送信息socket.io既然是用来实现通讯的,那么如何发送、接收信息才是根本。在socket.io中,emit函数用于发送数据,我们使用send的方式实现了信息的互发,其实send函数只是emit的封装,实际上还是使用了emit,且看send函数是如何实现的:123456function send(){ var args = toArray(arguments); args.unshift('message'); this.emit.apply(this, args); return this;}在send函数中,获取到原来的参数,并在原来的基础上插入了一个参数message,然后调用了emit函数。通过send函数的实现,我们也学会了emit函数的用法,它有多个参数,第一个参数是事件名称,在接收端注册该事件就可以接收到发送过去的信息,事件名称可以自由定义,在不同的场景下,我们可以定义不同的事件来接收消息。第二个参数才是发送的数据。了解清楚了工作原理,下面来将send替换成emit函数发送信息:123456//app.jsio.on('connection',function(socket){   socket.emit('message','连接成功!');   socket.on('message',function(data){  });});WebSocket 服务端事件事件监听是实现通讯的基础,因此充分了解socket.io的事件,学习如何在正确的时候使用它们至关重要。在一些关键的的状态下,socket.io可以注册相应的事件,通过事件监听,我们可以在这些事件中作出反应,常用的事件如下:connection——客户端成功连接到服务器。message——捕获客户端send信息。。disconnect——客户端断开连接。error——发生错误。WebSocket 客户端较服务端而言,客户端提供更多的监听事件,在实时应用中,我们可以为这些事件注册监听并作出反应,例如:connect提示用户连接成功,disconnect时提示用户停止服务等等。connection——成功连接到服务器。connecting——正在连接。disconnect——断开连接。connect_failed——连接失败。error——连接错误。message——监听服务端send的信息。reconnect_failed——重新连接失败。reconnect——重新连接成功。reconnecting——正在重连。那么客户端socket发起连接时的顺序是怎么样的呢?当第一次连接时,事件触发顺序为: connecting → connect;当失去连接时,事件触发顺序为:disconnect → reconnecting → connecting → reconnect → connect。WebSocket 命名空间命名空间着实是一个非常实用好用的功能。我们可以通过命名空间,划分出不同的房间,在房间里的广播和通信都不会影响到房间以外的客户端。那么如何创建房间呢?在服务端,通过of("")的方式来划分新的命名空间:12io.of('chat').on('connection',function(socket){});示例中,我们创建一个名为chat的房间,客户端可以通过如下方式连接到指定的房间:1var socket = io.connect('/chat');虽然连接到指定的房间,但是我们也可以在服务端操作,自由的进出房间:12socket.join('chat');//进入chat房间socket.leave('chat');//离开chat房间WebSocket 广播消息在实时应用中,广播是一个不可或缺的功能,socket.io提供两种服务端广播方式。第一种广播方式可以称之为'全局广播',顾名思义,全局广播就是所有连接到服务器的客户端都会受到广播的信息:1socket.broadcast.emit('DATA',data);但是,在实际应用场景中,我们很多时候并不需要所有用户都收到广播信息,有的广播信息只发送给一部分客户端,比如某个房间里面的用户,那么可以使用如下方式:1socket.broadcast.to('chat').emit('DATA',data);中间件socket.io提供中间件功能,我们可以通过中间件来对请求进行预处理,比如身份验证:1234io.use(function(socket, next){ if (socket.request.headers.cookie) return next(); next(new Error('Authentication error'));});示例中展示了通过中间件进行身份验证,当没有cookie的时候抛出异常。传递参数在很多应用场景中,客户端发起连接请求时都需要传递参数,这些参数可能是身份验证、初始化设置等等,那么socket.io发起连接时如何传递参数呢?1var socket = io.connect('/');由于connect函数发起连接的参数是一个url,你可能会想到把参数拼接到url上,如http://xxxx?xx=xxxx,但是很遗憾这样是行不通的,我们可以通过这样的方式来传递参数:1var socket = io.connect('/',{ _query:'sid=123456' });在服务端可以这样获取到传递的参数:1234io.use(function(socket){   var query = socket.request._query;   var sid = query.sid; });客户端传递的参数已经被解析成了一个json对象,这个对象就是_query。
  • [已解决问题归档] 【CloudUSM V600R019C10产品 对接jssip实现html5实时语音]
    【功能模块】 我现在要实现使用javascript   sip库 在前端html5页面实现基于sip协议 的实时语音,拔通连在cloud usm平台某一台坐机有没有什么开发例子能提供给我
  • [技术干货] html5表单的required属性使用
    如何自定义提示文字用户名<input type="text" id="username" required oninvalid="setCustomValidity('请输入您的姓名');" oninput="setCustomValidity('');">如何让required失效1:把按钮类型变成button而不是submit2:提交按钮添加formnovalidate属性<form method="post" action="">         用户名<input type="text" id="username" required="required"><br>         密码<input type="password" id="password" required><br>         <input type="submit" value="登录" formnovalidate >     </form>3:在元素中添加novalidate属性,禁用整个表单的验证功能<form method="post" action="" novalidate>         用户名<input type="text" id="username" required="required"><br>         密码<input type="password" id="password" required><br>         <input type="submit" value="登录" >     </form>4,pattern属性 - 使用正则表达式验证(1)不必使用^和$字符表示要匹配字段值得开头和结尾。(2)只设置pattern的话,空值也会通过。如果不允许空,则还要加上required属性。
  • [热门活动] 【活动结束】#GaussDB-for openGauss数据迁移之DRS直播专家坐堂答疑# 提问互动赢华为无线充电器等周边好礼!
    感谢各位小伙伴参与本次活动,本次活动获奖名单如下:活动中奖公示奖项名称获奖楼层社区昵称奖品备注优秀提问69wolfandy华为无线充电器 幸运奖9nukinsan笔记本套装与#69优秀提问重复,顺延至#1032//#32内容无效,顺延至#34仍然无效78客家鱻粉笔记本套装 100linghz666笔记本套装 112//与#69优秀提问重复,顺延至下一楼层仍为同一人请各位获奖的伙伴在8月3日之前点击此处填写收货地址,如逾期未填写视为自动弃奖。再次感谢各位小伙伴参与本次活动,欢迎关注华为云更多活动~【直播简介】【专家简介】 南风 华为云数据迁移DRS产品架构师【直播简介】 DRS是一款易用、稳定、高效,用于数据库在线迁移和数据库实时同步的云服务,它提供了以Oracle、MySQL、PostgreSQL、华为云RDS等多种数据库作为源端的数据迁移上云服务,其中GaussDB(for openGauss)作为华为云上的主力云数据库,DRS对其做了深度的开发支持,在迁移的功能和性能上具有很大优势,可以帮助客户简单、快捷、一键式的完成数据迁移。【直播时间】2021年6月22日 星期二 19:00-20:00直播链接:https://bbs.huaweicloud.com/live/cloud_live/202106221900.html 【活动介绍】【互动方式】直播前您可以在本帖留下您感兴趣的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行抽奖。【活动时间】6月17日—6月30日 【奖励说明】活动1:提问有礼评奖规则:在本帖提出与直播相关的问题,由专家在所有互动贴中选出1名最优互动贴的开发者进行奖励。奖品:华为无线充电器1个 活动2:盖楼有礼评奖规则在活动结束后(截止6月30日),在本帖所有盖楼的用户中抽取获奖楼层,获奖楼层=总楼层*中奖百分比,中奖百分比为8%、28%、68%、88%、98%。例如:活动束后总楼层为200,200*8%=16,即第16楼获奖,其他获奖楼层同理可得。如出现小数点,则四舍五入,例如:活动结束后总楼层为220,220*8%=17.6,即第18楼获奖。无效楼层不参与中奖,请勿连续刷楼超过5层或回复无关内容,否则视为无效。奖品:笔记本套装1套【注意事项】1、为保证您顺利领取活动奖品,请您提前填写奖品收货信息,如您没有填写,视为放弃奖励【点击此处填写信息】。2、活动获奖信息填写时间截止2021年7月9日,如未填写视为弃奖。本次先发活动奖品将于2021年7月30日前统一发出,请您耐心等待。3、活动期间每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一个合格楼层,仅一次顺延。4、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。5、其他事宜请参考【华为云社区常规活动规则】。
  • [技术干货] 华为RPA常见问题FAQ
    1. 华为RPA网页操作运行失败类    1.1 RPA运行脚本失败       1)可能造成问题的原因,是否有申请并导入了正确的License           注意License是否过期,当前License有效期为3个月,3个月后需要重新申请License。可以检查安装目录下,如D:\huawei\robot_studio\Robot\cfg\license\License.bin文件的创建时间;如果是执行机则检查相应文件夹下的License文件(Robot\cfg\license\License.bin)的创建时间。           License是一机一个,如果电脑硬件更换或者从其他电脑移植过来的License是无法在本机运行的,需要根据本机的ESN号码重新申请License。打开studio,点击【设置/Settings】后选择【申请许可/ApplyLicense】按照如图的三步完成。     2)可能造成问题的原因,RPA安装完成后手动修改过某些文件,或者修改过脚本工程里的文件。          新安装的RPA导入License后即可运行,无需修改,控制面板里卸载RPA后重新安装并导入License即可解决。或者还原修改过的脚本。     3)可能造成问题的原因,运行有错误提示,例如缺少xxxx.dll          缺少 C++ Library,如果没有安装的话,无法运行uiautomation的命令。 安装VC2015即可。     1.2 提取网页数据失败,运行报错NoSuchElementException       1)可能造成问题的原因,网页有跳转,需要进入了一个新的iframe            网页跳转后需要选中新窗口使其处于active状态。            新页面有iframe,未切换到新的iframe。在操作新页面前添加切换iframe,也可以使用录制的方法开发,可避免手动添加iframe。注意观察iframe的ID是否是变化的,如果是变化的,则需要用其他方式定位,比如name或者class等。     2)可能造成问题的原因,网页加载尚未完成。          因为网速等原因导致网页加载尚未完成,此时去提取数据则会失败,需要在提取的时候增加延时delay,比如增加5秒或者10秒的延时。     3)可能造成问题的原因,网页元素位置有变更。          网页有变更导致原先可以运行的脚本无法运行了,需要重新定位元素,定位元素的过程中尽可能的使用相对位置或者名字。比如 :        xpath=//button[text()="Reset"]        xpath=//a[contains(text(),'查找')]     4)可能造成问题的原因,中英文系统导致的脚本无法运行。         对于弹出的确认对话框在中英文系统会中会有区别,此时也需要注意。建议在开发的时候把两种定位方式都添加进脚本。     5)可能造成问题的原因,元素有遮挡。        被遮挡的页面元素不能被找到,这种情况下可以尝试scrollintoview命令滚动当前元素到浏览器窗口。如果是table建议使用gettable控件提取。    6)可能造成问题的原因,存在MoveToElement操作。        MoveToElement命令不能被录制下来,导致下拉菜单出不来,后续click命令找不到目标,这种情况下需要手工加入MoveToElement命令。2. 文件操作类    2.1 调试过程中Excel文件打开失败      答:此文件在上次调试的时候已经打开了,但是RPA运行出错退出导致没有关闭此文件引起,此时可以在资源管理器中杀掉Excel.exe的进程,或者自己建立一个批处理用来应对这种情况,批处理内容为:taskkill /f /t /im EXCEL.exe    2.2 getDownloadFile获取不到下载的文件名是怎么回事?      答:getDownloadFile需要在Chrome浏览器中设置默认下载路径后才会生效,具体可看本文的《怎样设置Chrome默认的下载路径》。    2.3 华为RPA可以预处理加工数据么?比如有一个csv文档,想要做一些汇总计算之类的。      答:是可以的,如果CSV格式是固定的,是可以通过遍历去做处理的;另外也可以用其他的工具做汇总运算,比如power query、宏、VBA、Python、C#等去做一些数据的处理。另外针对Excel操作单独开发了40多个控件,供大家使用,控件框中输入Excel即可查询到。    2.4 怎样判断是否存在某一个指定的文件?      答:filelist获取指定文件列下文件列表,再用for循环或许判断是否有目标文件,或者将List转为string类型后测试是否包含目标文件名字符串。3. 加压、解压类    3.1  怎样加压解压Zip/7z文件?      答:华为RPA开发了Zip/Unzip控件,对Zip/7z类文件进行加压与解压缩。    3.2    怎样加压解压RAR文件?      答:因为RAR压缩算法的原因,暂时没有控件支持RAR文件的加压解压缩,但是可以使用批处理或者startAPP控件,采用电脑自带的winrar的WinRAR.exe使用命令进行加压解压。4. 远程桌面Citrix类    4.1 远程桌面操作只能用图片识别?        答:因为本机造作远程桌面本机的RPA是识别不了远程的控件的,所以只能采用图片识别的方式。如果远程的是一**立的电脑,则建议在远程的电脑上安装或者运行RPA,采用在本机开发的方式,这样准确率与稳定性都有保障。    4.2  如何对整个窗体发送键盘命令?比如发送快捷键。      答:窗体获取焦点后,使用citrix.rawkeyboard控件,参数key值为"Enter","Ctrl"等特殊字符,type为"KeyDown"或"KeyUp"。如果我们需要在一个远程桌面应用程序输入一个"Enter",必须使用citrix.rawkeyboard两次,第一次type类型为"KeyDown",第二次为"KeyUp",模拟一次完整的敲击"Enter"的动作。这个命令和citrix.clickpicscreen一样,也必须在获取焦点的情况下操作。5. Email操作类    5.1  怎样使用outlook收发邮件?      答:华为RPA提供了Outlook的收发邮件控件mapi.getEmail与outlook.sendEmail,特别是发送邮件,需要注意的是需要本地电脑打开Outlook,否则可能一直是待发送状态。    5.2  怎样开发移植性高的收发邮件脚本?      答:那就是不借助Outlook收发邮件,使用pop.getEmail与smtp.sendEmail空间开发脚本,使用这两个控件的时候需要注意服务器server的设置,需要设置为正确服务器,小技巧是可以从Outlook里的【文件】信息页查到,只取https://xxxx.xxxx.com即可。 6. Java类    6.1 执行Java链接命令失败      答:若提示权限不足,需要使用管理员权限启动;若提示缺少provider,需要安装JDK并配置环境变量。    6.2 Java界面操作小技巧有哪些?      答:       1)在某些场景下达成目的的手段可能不止一种,比如ComboBox的选择可能根据name选择,也可以根据index选择。在有些场景下index选择的准确性可能会更好,这些都需要实际测试。       2)录制过程中的动作有时并不是完全准确的,比如在某些场景下可能会漏录一个动作,或者有时select动作可能会录成click动作,不用过多担心,在回放测试的时候这些问题都会暴露出来,我们手工进行修改就可以。       3)各种不同的JAVA GUI程序自动化的稳定性可能和程序本身相关。在进行自动化实践的时候可以从不同的维度多尝试解决方法,然后选择最稳定的实现方法。    6.3 如果某个日期选择窗口很难选取到指定的日期,怎么办?      答:可以使用executeScript控件,在控件中执行document.querySelector("#beginDate").value="2020-04-17","#beginDate"是控件的ID,更多内容可以参考《HUAWEI AntRobot RPA开发者认证课程(高级)》的5.3课程。    6.4 怎样放缩窗口?类似在浏览器里按住Ctrl+滚轮缩放窗口。      答:可以使用executeScript控件,在控件中执行document.body.style.zoom='0.5' 。0.5就是缩小50%,如果放大120%,就是设置为1.2即可。7. 其他    7.1 为什么使用从文件属性处copy的文件路径执行中会失败?      答:如果是使用鼠标右键,选择【属性】在【安全】标签中copy的【对象名称】处的文件路径,如下图所示,那么执行是可能失败的,因为通过此方式获取的文件路径可能带有异常字符,所以执行失败。也可以将此字符串copy到CMD窗口查看比对。     7.2 网页获取的字符串与copy的目标字符串是一样的,但是为什么判断条件失败?      答:如果字符串中带有空格,那么从浏览器copy出来的字符串里的空格与RPA提取的内容可能是不一致的,此时如果要做字符串比较,此时建议先用print的方法将字符串打印到工程/output文件夹的print.log里,然后从文本文件copy出来使用。    7.3 怎样设置Chrome默认的下载路径?      答:按照1/2/3/4/5的步骤选择,并粘贴进去红框的文字({"prefs":{"download.default_directory":"d:\"}})即可设置默认路径,关于网页自动化的高阶设置可以参考《HUAWEI AntRobot RPA开发者认证课程(高级)》的5.1课程
  • 关于HTML5你需要了解的基础知识
    本帖最后由 码小玩 于 2017-10-13 15:31 编辑作者:Palak Shah来源:Linux中国HTML5 是第五个且是当前的 HTML 版本,它是用于在万维网上构建和呈现内容的标记语言。本文将帮助读者了解它。HTML5 通过 W3C 和Web 超文本应用技术工作组Web Hypertext Application Technology Working Group之间的合作发展起来。它是一个更高版本的 HTML,它的许多新元素可以使你的页面更加语义化和动态。它是为所有人提供更好的 Web 体验而开发的。HTML5 提供了很多的功能,使 Web 更加动态和交互。HTML5 的新功能是:[*]新标签,如 和 [*]用于 2D 绘图的 元素 [*]本地存储 [*]新的表单控件,如日历、日期和时间 [*]新媒体功能 [*]地理位置HTML5 还不是正式标准(LCTT 译注:HTML5 已于 2014 年成为“推荐标准”),因此,并不是所有的浏览器都支持它或其中一些功能。开发 HTML5 背后最重要的原因之一是防止用户下载并安装像 Silverlight 和 Flash 这样的多个插件。新标签和元素[*]语义化元素: 图 1 展示了一些有用的语义化元素。 [*]表单元素: HTML5 中的表单元素如图 2 所示。 [*]图形元素: HTML5 中的图形元素如图 3 所示。 [*]媒体元素: HTML5 中的新媒体元素如图 4 所示。 [*]2894 [*]2895 [*]HTML5 的高级功能地理位置这是一个 HTML5 API,用于获取网站用户的地理位置,用户必须首先允许网站获取他或她的位置。这通常通过按钮和/或浏览器弹出窗口来实现。所有最新版本的 Chrome、Firefox、IE、Safari 和 Opera 都可以使用 HTML5 的地理位置功能。地理位置的一些用途是:[*]公共交通网站 [*]出租车及其他运输网站 [*]电子商务网站计算运费 [*]旅行社网站 [*]房地产网站 [*]在附近播放的电影的电影院网站 [*]在线游戏 [*]网站首页提供本地标题和天气 [*]工作职位可以自动计算通勤时间工作原理: 地理位置通过扫描位置信息的常见源进行工作,其中包括以下:[*]全球定位系统(GPS)是最准确的 [*]网络信号 - IP地址、RFID、Wi-Fi 和蓝牙 MAC地址 [*]GSM/CDMA 蜂窝 ID [*]用户输入该 API 提供了非常方便的函数来检测浏览器中的地理位置支持:[*]2896[*]getCurrentPosition API 是使用地理位置的主要方法。它检索用户设备的当前地理位置。该位置被描述为一组地理坐标以及航向和速度。位置信息作为位置对象返回。[*]语法是:[*]2897[*] [*]showLocation:定义了检索位置信息的回调方法。 [*]ErrorHandler(可选):定义了在处理异步调用时发生错误时调用的回调方法。 [*]options (可选): 定义了一组用于检索位置信息的选项。我们可以通过两种方式向用户提供位置信息:测地和民用。[*]描述位置的测地方式直接指向纬度和经度。 [*]位置信息的民用表示法是人类可读的且容易理解。如下表 1 所示,每个属性/参数都具有测地和民用表示。[*]2898[*]图 5 包含了一个位置对象返回的属性集。[*]2899[*]网络存储在 HTML 中,为了在本机存储用户数据,我们需要使用 JavaScript cookie。为了避免这种情况,HTML5 已经引入了 Web 存储,网站利用它在本机上存储用户数据。与 Cookie 相比,Web 存储的优点是:[*]更安全 [*]更快 [*]存储更多的数据 [*]存储的数据不会随每个服务器请求一起发送。只有在被要求时才包括在内。这是 HTML5 Web 存储超过 Cookie 的一大优势。有两种类型的 Web 存储对象:[*]本地 - 存储没有到期日期的数据。 [*]会话 - 仅存储一个会话的数据。如何工作: localStorage 和 sessionStorage 对象创建一个 key=value 对。比如: key="Name", value="Palak"。这些存储为字符串,但如果需要,可以使用 JavaScript 函数(如 parseInt() 和 parseFloat())进行转换。下面给出了使用 Web 存储对象的语法:[*]存储一个值: [*]localStorage.setItem("key1", "value1"); [*]localStorage["key1"] = "value1"; [*]得到一个值: [*]alert(localStorage.getItem("key1")); [*]alert(localStorage["key1"]); [*]删除一个值: -removeItem("key1"); [*]删除所有值: [*]localStorage.clear();应用缓存(AppCache)使用 HTML5 AppCache,我们可以使 Web 应用程序在没有 Internet 连接的情况下脱机工作。除 IE 之外,所有浏览器都可以使用 AppCache(截止至此时)。应用缓存的优点是:[*]网页浏览可以脱机 [*]页面加载速度更快 [*]服务器负载更小cache manifest 是一个简单的文本文件,其中列出了浏览器应缓存的资源以进行脱机访问。 manifest 属性可以包含在文档的 HTML 标签中,如下所示:[*]2900[*]它应该在你要缓存的所有页面上。缓存的应用程序页面将一直保留,除非:[*]用户清除它们 [*]manifest 被修改 [*]缓存更新视频在 HTML5 发布之前,没有统一的标准来显示网页上的视频。大多数视频都是通过 Flash 等不同的插件显示的。但 HTML5 规定了使用 video 元素在网页上显示视频的标准方式。目前,video 元素支持三种视频格式,如表 2 所示。[*]2901[*]下面的例子展示了 video 元素的使用:[*]2902[*]例子使用了 Ogg 文件,并且可以在 Firefox、Opera 和 Chrome 中使用。要使视频在 Safari 和未来版本的 Chrome 中工作,我们必须添加一个 MPEG4 和 WebM 文件。video 元素允许多个 source 元素。source 元素可以链接到不同的视频文件。浏览器将使用第一个识别的格式,如下所示:[*]2903[*]
总条数:26 到第
上滑加载中