- 浏览: 487315 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
Source_野驴:
...
jsp静态化和伪静态化 -
zidanzzg:
很好的知识,找到了利用异或交换数值的理论支持,谢谢分享
XOR的性质和运算 -
ueseu:
引用(2) DomainDomain域名也是Cookie的一部 ...
Cookie的组成 -
ueseu:
引用Secure取true或者false值。如果为true,那 ...
Cookie的组成 -
liqi___123:
理解得很透彻,谢谢!!
ROLAP、MOLAP和HOLAP联机分析处理区别
一般情况下,采用长连接,能持续的在客户端显示信息。
比如
<%@ page language="java" c pageEncoding="utf-8"%> <% out.flush(); int number = 0; while (true) { out.println(new java.util.Date()+" "); out.flush(); Thread.sleep(100); System.out.print("."); if (number++ > 100) { break; } } %>
这个代码会在客户端连续的显示时间。请注意,浏览器的正在下载是一直在运行中的。这个会让客户感到疑惑,难道还有东西在运行吗?
下面的这个方法,可以解决这个问题
我们先看服务器端代码。
使用了prototype.js
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Comet php backend</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <script type="text/javascript"> // KHTML browser don't share javascripts between iframes var is_khtml = navigator.appName.match("Konqueror") || navigator.appVersion.match("KHTML"); if (is_khtml) { var prototypejs = document.createElement('script'); prototypejs.setAttribute('type','text/javascript'); prototypejs.setAttribute('src','../js/prototype.js'); var head = document.getElementsByTagName('head'); head[0].appendChild(prototypejs); } // load the comet object var comet = window.parent.comet; </script> <% out.flush(); int number = 0; while (true) { // 这里生成了调用js的代码 out.println("<script type='text/javascript'>comet.printServerTime('" + new java.util.Date() + "');</script>"); out.flush(); Thread.sleep(100); // 控制台显示,程序正在运行,正式运行可去掉 System.out.print("."); // 防止程序一直运行,给调试带来麻烦,正式运行可去掉 if (number++ > 100) { break; } } %>
关键在客户端代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Comet demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="../js/prototype.js"></script> </head> <body> <div id="content">The server time will be shown here</div> <script type="text/javascript"> var url= 'testLinkData2.jsp'; var comet = { connection : false, iframediv : false, initialize: function() { if (navigator.appVersion.indexOf("MSIE") != -1) { // For IE browsers comet.connection = new ActiveXObject("htmlfile"); comet.connection.open(); comet.connection.write("<html>"); comet.connection.write("<script>document.domain = '"+document.domain+"'"); comet.connection.write("</html>"); comet.connection.close(); comet.iframediv = comet.connection.createElement("div"); comet.connection.appendChild(comet.iframediv); comet.connection.parentWindow.comet = comet; comet.iframediv.innerHTML = "<iframe id='comet_iframe' src='./"+url+"'></iframe>"; } else if (navigator.appVersion.indexOf("KHTML") != -1) { // for KHTML browsers comet.connection = document.createElement('iframe'); comet.connection.setAttribute('id', 'comet_iframe'); comet.connection.setAttribute('src', './'+url); with (comet.connection.style) { position = "absolute"; left = top = "-100px"; height = width = "1px"; visibility = "hidden"; } document.body.appendChild(comet.connection); } else { // For other browser (Firefox...) comet.connection = document.createElement('iframe'); comet.connection.setAttribute('id', 'comet_iframe'); with (comet.connection.style) { left = top = "-100px"; height = width = "1px"; visibility = "hidden"; display = 'none'; } comet.iframediv = document.createElement('iframe'); comet.iframediv.setAttribute('src', './'+url); comet.connection.appendChild(comet.iframediv); document.body.appendChild(comet.connection); } }, // this function will be called from backend.php printServerTime: function (time) { $('content').innerHTML = time; }, onUnload: function() { if (comet.connection) { comet.connection = false; // release the iframe to prevent problems with IE when reloading the page } } } Event.observe(window, "load", comet.initialize); Event.observe(window, "unload", comet.onUnload); </script> </body> </html>
请注意其中的
comet.connection = new ActiveXObject("htmlfile");
部分,就是这段代码生成了一个可以在IE浏览器下面,不再显示正在下载状态。据说这个是google的聪明人发现并应用于google的gtalk和gmail
最后,我们来看使用Ajax的查询方式,
服务器端在没有数据的情况下会阻塞,直到有数据。
服务器端
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% out.flush(); int number = 0; while (true) { // 这里可以插入检测的代码,我后面直接休眠100毫秒代替了 out.println("{'timestamp':'"+System.currentTimeMillis()+"','msg':'"+ new java.util.Date() + "'}"); out.flush(); Thread.sleep(100); System.out.print("."); if (number++ > 1) { break; } break; } %>
看关键的客户端
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Comet demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="../js/prototype.js"></script> </head> <body> <div id="content">内容</div> <script type="text/javascript"> var Comet = Class.create(); Comet.prototype = { timestamp: 0, url: './testLinkData3.jsp', noerror: true, initialize: function() { }, connect: function() { this.ajax = new Ajax.Request(this.url, { method: 'get', parameters: { 'timestamp' : this.timestamp }, onSuccess: function(transport) { // handle the server response var response = transport.responseText.evalJSON(); this.comet.timestamp = response['timestamp']; this.comet.handleResponse(response); this.comet.noerror = true; }, onComplete: function(transport) { // send a new ajax request when this request is finished if (!this.comet.noerror) // if a connection problem occurs, try to reconnect each 5 seconds setTimeout(function(){ comet.connect() }, 5000); else this.comet.connect(); this.comet.noerror = false; } }); this.ajax.comet = this; }, disconnect: function() { }, handleResponse: function(response) { $('content').innerHTML += '<div>' + response['msg'] + '</div>'; }, doRequest: function(request) { new Ajax.Request(this.url, { method: 'get', parameters: { 'msg' : request } }); } } var comet = new Comet(); comet.connect(); </script> </body> </html>
发表评论
文章已被作者锁定,不允许评论。
-
http返回网页状态码查询
2013-05-18 23:29 1060当你想查询某个页面的 ... -
铱迅Web应用防护系统(WAF)介绍
2013-05-04 22:41 0产品介绍 铱迅Web应用防护系统(也称:铱迅w ... -
javascript地址栏写法
2013-05-01 11:43 12280. 前言 所谓IE地址栏 ... -
javascript单引号和双引号区别
2012-09-10 16:58 796在一个网页中的按钮,写onclick事件的处理代码,不小 ... -
超链接打开目标(target)的测试
2012-05-28 12:51 821链接的target属性决定了链接在哪边打开,它的值通常为以下五 ... -
JSP中文验证码
2012-05-14 17:18 1249以上两篇文章的内容介绍了有关JSP中产生数字验证码跟中文验证 ... -
CSS简写方法说明
2011-10-26 14:15 1028简单的说,css简写就是在等效的前提下,把多句 ... -
ZK框架简介
2011-07-21 08:08 13731、ZK框架简介 ZK框架是 ... -
使用document.domain跨域实例
2011-05-29 22:42 2016Ajax跨域一直是个比较麻烦的问题,例如:断 ... -
再谈iframe自适应高度
2011-05-18 15:56 1029转自:http://ued.koubei.com/?p=243 ... -
JavaScript修改css样式style
2011-05-18 15:26 1079用JavaScript修改网页样式一、局部改变样式分为改变 ... -
关于multipart/related;boundary=
2011-05-16 09:51 3314http协议对mime类型有详细描述,multipart/ ... -
MIME邮件格式分析及信息提取
2011-05-16 09:50 2015摘 要 MIME是目前互联网邮件普遍采用的 ... -
在网页中使用Data URI嵌入Base64编码文件
2011-05-15 21:19 4916在网页中嵌入Base64编码文件 通过这种方法可以将任何文件 ... -
SSO三种方案
2011-03-11 18:13 12741、基于domain的方案。 应用A在a.domain ... -
在网页中嵌入任意字体的解决方案
2011-01-30 17:29 4401字体使用是网页设计中不可或缺的一部分。经常地,我们希望在 ... -
面向站长和网站管理员的Web缓存加速指南
2011-01-04 16:18 823原文(英文) ... -
Cookie的组成
2010-12-28 11:21 3658Cookie的组成 下面讲解一下Cookie的组成,对HTT ... -
可缓存的动态页面设计
2010-12-24 14:21 1347什么样的页面能够比较好的被缓存服务器缓存呢?如果返回内容的HT ... -
Apache缓存系统
2010-12-22 13:52 1920Apache 从2.0开始就 ...
相关推荐
在某些情况下,我们可能需要进一步隐藏`<input type="file">`元素本身,比如在IE浏览器中,使用`left`属性定位会导致输入框可见。为了避免这种情况,我们可以设置`input`的`opacity`为0,并使用`-ms-filter`滤镜在IE...
`disdrag()`函数的目的是在IE浏览器中禁止页面拖拽,而`window.location="";`则会在页面尝试加载时重定向到空地址,实现某些安全保护。 9. 禁止链接跳转 在脚本中通过条件判断`if(window.location.protocol.indexOf...
禁止IE浏览器滚动条显示 ```html ``` 这段HTML代码用于在Internet Explorer浏览器中隐藏页面的垂直滚动条,从而实现全屏效果。 ### 5. 弹出新窗口 ```html <!-- <!-- 打开新窗口 --> window.open('...
此方法仅在IE浏览器中有效,其他浏览器可能不支持`fileSize`属性。 #### 4. 动态删除DOM元素 使用`removeNode()`方法可以动态删除DOM元素,例如: ```javascript var img1 = document.getElementById('myImage');...
- 示例代码演示了如何实现文本滚动动画、数字计时器以及简单显示和隐藏元素的动画。 - 文本滚动动画通过逐字符显示字符串来实现。 - 数字计时器使用`setInterval`每秒更新计数器。 - 显示/隐藏元素动画通过切换...
mxp/想自己定义IE浏览器的滚动条吗?用这个插件吧,IE5.5以上支持 mxp/插入上标、下标 mxp/在代码编辑状态下,点击右键,选择Insert JS Function Call,会在当前位置插入定义过的函数名 mxp/使得M18 - Netscape 6...
- **使用条件注释**:针对IE浏览器编写特定的CSS样式。 - **升级浏览器**:建议用户使用更现代的浏览器,如Chrome、Firefox等。 #### 3. 在浏览器端不能使用 ShowMessage() `ShowMessage()` 是UniGUI中用于弹出...
注意,此方法仅适用于旧版IE浏览器。 26. **同时执行两个事件**: 通过在函数声明中逗号分隔,可以同时注册两个事件处理函数: ```javascript function document.onclick, document.onkeydown() { window....
- 缺点:兼容性较差,主要依赖于IE浏览器的特性,不适用于其他浏览器环境。 #### 开发Comet应用的注意事项 在开发基于Comet的应用时,需要注意以下几个关键点: 1. **跨域问题**:确保服务器端能够正确处理跨域...
- **代码示例**: 展示如何使用JavaScript打开指定尺寸的弹出窗口。 #### 75. javascript的容错脚本 - **容错脚本**: 展示如何使用JavaScript处理错误和异常情况。 #### 76. Web search with JavaScript - **搜索...
在IE浏览器中,UniGUI控件的字体可能会变小或模糊,这可能是因为浏览器的兼容性问题或CSS样式设置不正确。可以通过调整控件的CSS样式或采用跨浏览器的字体设置来解决。 3. **ShowMessage()在浏览器端** 浏览器...
0016 使用快捷键打开对象观察器中的“...”按钮 11 1.5 其他相关应用技巧 11 0017 安装合适的Delphi版本 11 0018 熟练掌握Delphi中的菜单项 12 0019 构成Delphi项目的主要文件 12 0020 如何在程序中调用...
0016 使用快捷键打开对象观察器中的“...”按钮 11 1.5 其他相关应用技巧 11 0017 安装合适的Delphi版本 11 0018 熟练掌握Delphi中的菜单项 12 0019 构成Delphi项目的主要文件 12 0020 如何在程序中调用...
- **使用Web标准兼容模式**:确保IE浏览器以Web标准兼容模式运行,避免使用旧版渲染引擎。 - **调整DPI设置**:对于高分辨率显示器,适当调整DPI设置也可能有助于改善显示效果。 #### 3. 在浏览器端不能使用`...
SWFUpload使用一个隐藏的Flash影片来控制文件的选择和上传。JavaScript用来激活文件选择对话框。 此文件选择对话框是可以设置允许用户选择一个单独的文件或者是多个文件。 选择的的文件类型也是可以被限制的,因此...
不扫描驱动器看是否有坏区域,因此只应对以前格式化过的驱动器使用该参数。 /fs:file-system 指定要使用的文件系统:FAT、FAT32 或 NTFS 。如果未指定文件系统,将使用现有的文件系统格式。 Map 显示...