企业IT管理员IE11升级指南 系列:
【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍
【2】—— Internet Explorer 11 对Adobe Flash的支持
【6】—— Internet Explorer 11面向IT专业人员的常见问题
Win7和Win8.1上的IE11功能对比
在 HTML5 视频、触摸支持、设备和屏幕方向 API、Windows 集成和性能方面,Windows 8.1 上的 Internet Explorer 11 与 Windows 7 上的 IE11 之间有许多不同。
设备方向事件
Internet Explorer 11 利用设备方向和移动事件、全屏模式编程控制,以及将屏幕锁定在特定方向的能力,让你能够更好地控制网站和应用的显示。
IE11 添加了对 DOM 事件的支持,DOM 事件提供了新兴的 W3C DeviceOrientation 事件规范中定义的有关设备的物理方向和移动的信息。
要点 此功能在 Windows 7 上的 IE11 中不受支持。
若要了解详细信息,请参阅设备方向事件。
拖放触摸支持
Internet Explorer 11 引入了对基于触摸的 HTML5 拖放的本机支持。
向你的 Web 应用添加拖放功能为用户提供直观的方式来从一个位置向另一个位置移动或复制文件,或者直观地重排集合中的项目。就像 Internet Explorer 默认提供基本触摸支持一样,使用 HTML5 拖放的大多数现有站点应该“恰好能够”与“按下、按住,然后拖动”用户交互模式配合使用。虽然你会像预期的那样收到 UI 线程上的用户输入事件,但 IE 实际上是在单独的一个线程上处理通过 ghost 操作得到的拖动图像呈现和动画,以使你的站点尽可能处于响应性较好的状态。
要点 此功能在 Windows 7 上的 IE11 中不受支持。
UX 模式
按下、按住,然后拖动
对于为 Web 内容提供服务的触摸设备,针对拖放的一种常用用户交互模式就是 “按下、按住,然后拖动”这个序列。在 IE11 中,这是具有 draggable 属性的元素的默认行为。很多站点具备“位于折叠位置以下”的内容,需要依靠垂直平移/滚动才能看到,采用新 Windows UI 的 Internet Explorer 提供了通过水平轻扫向后/向前导航功能。因此,基于触摸的拖放的“按下、按住,然后拖动”模式通常最适合与采用 IE11 的网站一起使用,而“横向滑动”模式是针对 Windows 应用商店应用的有效方法。
注意 对基于触摸的拖放操作的支持限于单个浏览器窗口。虽然不可能跨窗口拖动元素,但支持从 Windows “桌面”将文件对象拖动到桌面中的 IE11 窗口中。
横向滑动
很多 Windows 应用商店应用和某些网站使用平面导航系统,这种情况下用户在单个页面上平移和/或在站点相同层次结构级别上驻留的页面中导航。使用横向滑动交互模式,这些应用可以消除用户相对于拖动平移的意图,方法是仅允许使用 touch-action 属性在一个轴上平移:
CSS
touch-action: pan-x;然后沿垂直轴响应 drag events 和 manipulation events:
为了改善横向滑动用户体验,IE11 和 Windows 应用商店应用在 touch-action 属性中引入了 cross-slide-x 和 cross-slide-y 值。这些值请求 IE(或 Windows 运行时,如果是 Windows 应用商店应用)响应在独立于 UI 的线程上使用横向滑动动画进行的某些用户交互。
此外,IE11 和 Windows 应用商店应用还提供了几个新的状态值,以供进一步微调 MSManipulationEvent 的处理:
术语 | 描述 |
MS_MANIPULATION_STATE_PRESELECT | 联系人已启动横向滑动交互。 |
MS_MANIPULATION_STATE_SELECTING | 横向滑动交互已超过选择距离阈值;选择已激活。 |
MS_MANIPULATION_STATE_DRAGGING | 横向滑动交互已超过拖动距离阈值;拖动已激活。 |
MS_MANIPULATION_STATE_CANCELLED | 横向滑动交互已取消。发生这种情况的原因可能是以下几种:
|
MS_MANIPULATION_STATE_COMMITTED | 已释放触摸屏指针,操作已完成。 |
效果批处理和笔划改进功能
IE11 和 Windows 8.1 的使用 JavaScript 的 Windows 应用商店应用利用 Windows 8.1 中的 Direct2D 升级来改善图形效果和笔划性能。
因为它们使用多种中间纹理,所以阴影和复合操作等 Canvas 效果、SVG 滤镜效果、CSS 边框阴影和文本阴影都 非常耗费资源。IE11 和利用 Windows 8.1 中对 DirectImage 批处理行为的更改来更有效地联合 Direct3D Draw 调用,将对设备状态的更改减到最少。此更改会提升 Canvas、SVG 和 CSS 效果的性能,并会通过降低所使用中间值的个数来提升内存。
笔划是游戏和应用中使用的常见模式,用于绘制细线或轮廓线。使用 JavaScript 的 IE11 和 Windows 应用商店应用使用新的笔划算法,极大地提升了 Canvas 和 SVG 中的笔划性能。
要点 此功能在 Windows 7 上的 IE11 中不受支持。
加密的媒体扩展
IE11 引入了对 HTML5 加密媒体扩展 (EME) 的支持。 EME 扩展了 video 和 audio 元素,从而可以在不使用插件的情况下启用受数字版权管理 (DRM) 保护的内容。 EME 在使用 Windows 8.1 的 IE11 和使用 JavaScript 的 Windows 应用商店应用中受支持。
要点 此功能在 Windows 7 上的 IE11 中不受支持。
以下是与 EME 一起使用的一些主要 API。
API | 描述 |
用于解密和加密媒体数据的密钥。 | |
表示与数字版权管理 (DRM) 密钥系统的会话。 | |
创建与 MSMediaKeys 关联的 MSMediaKeySession。 | |
媒体元素上指定密钥系统的属性。 密钥系统标识内容保护提供程序或解密机制。 | |
媒体元素上指定 MSMediaKeys 的属性。 | |
设置指定 MSMediaKeys 的密钥属性。 | |
指定与 MSMediaKeys 相关的错误的类型。 | |
需求场景还原 国内某二线城市某科技公司,项目、产品繁多,软硬件通吃。硬件大牛H,软件新人S,研发BOSS: H:BOSS,这两天刚刚搞出个采集电参数的模块,能不能安排人做个简单的测试程序,就是一个串口,电脑上看一下数据就行,很简单的; BOSS:可以,小S,你把老H这个功能实现下,在我原来的那个XXX串口程序基础上改一下就行了; S:我在整个网站,没时间呀? BOSS:这个简单,改一下显示就行了; S:行,听你的(无奈!!) 然后S把BOSS原来的程序COPY一份,开改打开串口--->收数据---->分析数据--->显示--->关闭串口,丫的还要改程序名字等等 ... X月过后: H:BOSS,我整了个XX控制器,需要用电脑软件控制一下就行,就发两个控制指令,然后看到控制结果就行,很简单的; BOSS:老H,你干的不错呀,小S,你有空把这个控制实现一下,就在你上次那个采集程序基础上改一下就行了; S:我上次那网站还没整完呀?客户吹的紧呀? BOSS:这个简单,就两个控制指令,算你半天工作量 S:(内心:简单?简单$%$$####%^) 然后S把原来的采集程序COPY一份,开改打开串口--->发控制指令--->收数据---->分析数据--->显示--->关闭串口,丫的还要改程序名字等等 ... 又是X月过后: H:BOSS呀,有个客户那边说我们的协议不好使,要用国标的协议,能不能把协议稍微改一下,很简单的; BOSS:嗯,客户第一嘛,小S,耶...小S...小S...小S...小S... S:老大,我是真没空呀,让老H自己改吧,很简单的,把XX工程打开,改XX文件XX行 H:......
思维的逆转 搞硬件的老H能改?他知道显示界面怎么委托?开玩笑,他可能都不知道什么是类; 还有为什么老是拿以前的程序来改?因为我们需要以前的串口读写程序,新写的话太费时间,你说我可以封装好点,让别人调用方便点,那还是得调用呀,如果换成网络TCP怎么办?再换成其他的怎么办? 我们对底层依赖的太严重了!我们应该把这种依赖倒置(小S:不就是依赖倒置嘛,切!!BOSS:#@¥%,理论害死人呀,你丫知道你不实践)。我们要做一个平台,无论什么协议,无论什么串口、网络,甚至其它通信方式,还有WINFORM界面显示我都把它预先处理好,让只会简单C语言的老H只关心他知道的协议; 于是就出现下面这个框架:
绿色表示原始数据包的流向情况,平台自己处理所有与硬件通信功能,所有的协议放在模块中用户自己处理。 平台完成开发后,提供一个接口定义的模块,比如下面这个接口: namespace IDataMonitor { public abstract class DllBase { /// <summary> /// 接收数据处理函数 /// </summary> /// <param name="buffer">收到的原始数据</param> /// <returns>返回一个字符串,用于采集平台界面显示</returns> public abstract string OnReceive(byte[] buffer); /// <summary> /// 模块加载的时候执行,禁止在该函数里编写长时间执行的代码,如果需要可以用线程代替 /// </summary> public abstract void DllLoad(); /// <summary> /// 在主程序退出时执行 /// </summary> public abstract void DllUnload(); /// <summary> /// 可以通过该委托发送查询/控制指令 /// </summary> public Func<byte[], bool> SendFunc; } }
公司内部或其他公司开发人员拿到接口定义模块后,就可以基于它开发完成自己的协议模块(DLL形式),然后放置在平台指定的文件夹下即可,无需再次修改数据通信平台的代码,真正实现公司数据采集平台的通用。
用户使用 平台搭建完成后,老H只需要新建一个类库工程,添加接口文件的引用,然后如下处理自己的协议即可: namespace TestDll { public class Class1 : DllBase { private volatile bool _bListen = true; public override string OnReceive(byte[] buffer) { //这里测试,原包返回 return Encoding.Default.GetString(buffer); } public override void DllLoad() { var thread = new Thread(Query); thread.Start(); } public override void DllUnload() { _bListen = false; } public void Query() { while (_bListen) { string test = "this datas come from test dll"; SendFunc(Encoding.Default.GetBytes(test)); Thread.Sleep(1000); } } } }
然后老H把生成的DLL文件放置在平台运行文件夹下,简单配置一下对应的具体网络(或串口):
我为了方便,把测试的串口和网络都对应到TestDll处理了,运行的效果如下:
通过代码可以看出,无需了解任何winform、TCP或串口编程知识,甚至可以不用知道什么是TCP,什么是串口,只需要把收到的数据解析出来就行了。小S泪流满面,BOSS清静了!!
链接 平台主文件DataMonitor工程及相关的接口测试:https://datamonitor.codeplex.com/
本文链接:通用数据采集平台,从架构到代码,转载请注明。
订阅:
博文评论 (Atom)
|
没有评论:
发表评论