CSK.Blog--个人原创Weblog

ActiveX不再Active了……

标题说的有点夸张了,其实是M$的KB912945对今后IE的一些修改

据说是和专利纠纷有关,M$打算在不久后发布一个新的IE补丁,同时也将被IE7采用。这个补丁十分的荒唐:

After you install this update, you cannot interact with ActiveX controls from certain Web pages until these controls are enabled. To enable an ActiveX control, manually click the control.

大意是:在安装好本次更新后,除非你事先手动将页面上的ActiveX控件激活,否则无法和他们交户

直白点就是比如网页上的一个Flash游戏,你先要去点击他一下,让IE把它激活,然后开能开始进行正常操作,下面是装了这个补丁的IE的画面:

 

如果不做修改,以后我Blog上的那个Flash鼠标移上去是这样的,然后你必须去点一下激活它,而且如果页面上有3个Flash或者是MeidaPlayer控件或者是Java程序,那么每个都需要你去手动激活……

真不明白这样有什么好处……幸好只是阻断了与用户的交互,相当于调用了EnableWindow(hActiveXWin,flase);这样的API,插件的非交互性操作都是正常的,但每次要去点一下总是很不爽的。这个补丁在2个月内就会公开发表,所以还是早做准备为好

在MSDN上有一篇教开发人员如何应对此改动的文章,地址是:

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp

里面最有价值的就是可以用JScript来绕过IE的阻挡,无须用户手动激活插件,大致方法就是把Object或者Applet块用document.write动态写入,同时包含此语句的JS必须是外部的.js文件,如果是该页面内的(inline)代码就无效了。

当然你也可以专门写个函数放在外部文件里,页面内再调用这个函数,以便应对不同情况,省得每个flash都要写长长的document.write了。

下面是我写的一个函数,常用的设置都包含了,不需要的项目就留空

 function WirteFlashBlock(strURL,nWidth,nHeight,strBkColor,strID,strAlignMode,strQuality,strFlashVars)
{
 var embedTxt;
 embedTxt = <embed;
 if (strURL==null)
 {
  return;
 }
 embedTxt += src=+strURL+;
 document.write(<object classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0);
 if (nHeight)
 {
  document.write( height=+nHeight+);
  embedTxt += height=+nHeight+;
 }
 if (nWidth)
 {
  document.write( width=+nWidth+);
  embedTxt += width=+nWidth+;
 }
 if (strID)
 { 
  document.write( id=+strID+);
  embedTxt += name=+strID+;
 }
 if (strAlignMode)
 {
  document.write( align=+strAlignMode+);
  embedTxt += align=+strAlignMode+;
 }
 
 document.write(>);
 document.writeln(<param name=menu value=false>);
 embedTxt += menu=false;
 document.writeln(<param name=allowScriptAccess value=always />);
 embedTxt += allowScriptAccess=always;
 if (strFlashVars)
 {
  document.writeln(<PARAM NAME=FlashVars VALUE=+strFlashVars+>);
  embedTxt += FlashVars=+strFlashVars+;
 }
 
 document.writeln(<param name=movie value=+strURL+ />);
 if (strQuality)
 {
  document.writeln(<param name=quality value=+strQuality+ />);
  embedTxt += quality=+strQuality+;
 }
 else
 {
  document.writeln(<param name=quality value=High />);
  embedTxt += quality=High;
 }
 if (strBkColor)
 {
  document.writeln(<param name=bgcolor value=+strBkColor+ />);
  embedTxt += bgcolor=+strBkColor+;
 }
 embedTxt += type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer  swLiveConnect=true ></embed>;
 document.writeln(embedTxt);
 document.writeln(</object>);
}

最后提醒的是,如果IE将“禁用脚本调试”的选项勾去掉了,那么还是不会起作用,但普通用户不太可能会去调试脚本的,所以也无所谓,而且M$也承诺在后续的更新中解决此问题:

External script technique does not work when the Disable Script Debugging (Internet Explorer) check box is cleared

Microsoft is investigating this problem and plans to fix it in a future cumulative update.

好了,继续作PRP去了……

视觉幻象

其实不太想把这放上来,我比较注重自己的版权问题,同样的别人的版权也要注重,所以我blog一向以发布自己作品为主,但这次一定要放,因为这些图片太赞了。原来的作者我无法考证,这些图片是在学校bbs上看来的。

原文地址:http://bbs.sjtu.edu.cn/bbstcon?board=PIC&reid=1143693626

也许你以前看过,如果第一次看,那么先看图片,然后我再解释

 

上面就是所有的了,看出来没有,那些景物为何会出现在普通的街道上?

其实这些景物一样都不存在,他们只是绘画者利用事先的计算,模拟出的确存在这些景物时应该在地面的投影,然后画在地板上的!呵呵,其实个人感觉和立体图的原理有一定的相似啊……

这些图片的版权归相应的作者所有。

对Flash网站做了些更新

虽然最近十分忙,因为赶项目进度嘛 不过今天还是抽空把Flash网站更新了下,这是自上次发布Demo版的V2版Flash站以来最大的改动。首先从直观上能看到的是加入了进站音乐,当然我不希望和blog一样,所以是短短的一段intro罢了。不过旋律是我比较喜欢的那种,来自dj_feel_-_live_in_trancemission中第一首:Ilyia Maluev - Welcome To Heaven(嘿嘿,是俄罗斯的DJ做的)。 同时直观的改动估计就只是其衬托背景图片作了些修改,其他就是没那么起眼但十分重要的代码级和构架级的修改。 首先是增加进我曾发表的自动XML分析器组件作为ReformPost的处理函数内核,修正了一些bug,同时最大的变化就是增加了BackButton支持。 也只能说自己孤陋寡闻了,以前我曾提过用在页面后加上#cmd=ddd之类的后缀作为ajax页面对于无法有url定位资源的一种补充。其实对于flash网站,这个技术是由专门名词的,就叫做BackButton。不过思路和我不略有不同: 我的出发点是用URL来定位资源,比如我浏览flash里面的某一个内容,别人只要知道了我现在带有#后缀的url也能获得基本上和我一致的flash页面的状态:比如某个按钮已经按下,显示和加载了其他的movieClip。 而BackButton的出发点是flash里面点了某个连接后,使得内容发生变化,但和html不同,它不会刷新页面,自然无法用后退按钮来回到前一状态,用这个BackButton就能解决这个问题,当然他也解决了我要处理的问题。 所以干脆就把2者都结合起来使用。我现在也感觉到推迟网站发布也有一定好处,就像M$推迟Vista,这样随着理念的成熟,可以不断地把新技术融入到我的网站,以便精益求精。 呵呵,好了,就写这么多,不过我不希望看到私自反编译我网站的现象出现,虽然我无法知道,但至少不能公布于众……

程序员的“作弊纸(cheatsheet)”

如果你曾在以往学习中有过不安分的举动的历史:有没有在考试前把一些重要的知识点抄在一张小纸片上,企图考试……

Learning vi -- the cheatsheet technique

图片来自:www.gentoo.org/ doc/en/vi-guide.xml

就像上面图中那样,这种便是今天我要介绍的CheatSheets。是不是很像用来作弊的小纸片呢?的确,叫它们cheatsheet的确还是和作弊有一定关系:因为作弊纸上往往把知识点罗列的很清楚,查找也相当方便(否则怎么去作弊……)

如今程序开发往往需要大量的外界函数库或者需要查各种资料手册,虽说现成的手册和帮助文档随处可见,但如果有一张纸片大小的东西把几乎所有重要的函数都列出了,同时附上了些小技巧岂不是更好?

JavaScript的CheatSheet

源图片:http://www.ilovejackdaniels.com/javascript_cheat_sheet.png

上面的图片有一张A4大小,里面列出了常用的JavaScript函数和属性,总之有了这些cheatsheets以后的确能给今后的开发提供很多便利,因为很多时候你只是想不起一个函数的名字或者他需要哪些参数而已(对吧?)

这里要推荐www.ilovejackdaniels.com 这个网站,里面提供了ASP/JavaScript/MySQL等的cheatsheets,有条件的可以把他们打印下来,放在墙上或桌上,开发的时候需要查函数了抬头看看就行,呵呵。

常用的cheatsheets下载地址:

 类型  地址
 ActionScript2  http://theflashblog.com/?p=139
 CSS  http://www.ilovejackdaniels.com/css/css-cheat-sheet/
 JavaScript  http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/
 ASP/VBscript  http://www.ilovejackdaniels.com/cheat-sheets/asp-vbscript-cheat-sheet/
 MySQL  http://www.ilovejackdaniels.com/php/mysql-cheat-sheet/
 PHP  http://www.ilovejackdaniels.com/php/php-cheat-sheet/

最后提醒各位:本人反对考试作弊……

要开始调解和控制心情了

PRP的最终答辩时间已经定出了,死期(Deadline)降至,开来必须面对现实了。

长期繁重的事务已经让我似乎对很多事情有了一种厌倦之感。很久没有那种兴奋或者好奇之感了,每天基本上是拖着疲劳的身体不情愿的起床,晚上又迷迷糊糊的睡去。

这样的精神状态自然也会改变一些爱好的,首先是喜欢清谈休闲的东西,以至于有天把网站封页都换成白色的了(就是现在那个)

其次是更加“迷信化”。这是说给那些无神论或打算和唯心论者为敌的人说的。唯心是我的信仰,我想有没有神不用去讨论,但世界是不是唯心的不可能有任何理论或某些已被当作圣人的人能否定的。我希望一切都平平安安的,以至于宁愿相信有神灵的存在,当遇到不如意之事可以有心灵的寄托

还有就是近期对电子乐比较反感了……可能身体和心理状态不好不适合去听,喜欢听些清静的。

同时BLog上挂的音乐都很久没换了,于是从Enya的Box Collection #3中挑了5首我自认为能表现自己心境的放出来作为一周五个工作日的进站音乐,好让我每天开始调节下心情,安静下来去coder或者看书或者pray...

其实,宁愿自己什么都不会,做个相当相当平凡的人,整天无人问津去过自己的生活,和几个知心的人游遍世界,这似乎才是人的归宿。我们很多时候都是迫于别人的压力或者期望,才无奈的在这短暂的人世去争抢一些看似有用但绝不会永恒的东西...

我又说胡话了

PRP——最后的16天

其实想等最后搞定了再说出来,不过其任务的艰巨性实在是让我想……

项目从去年10月开始,虽然到现在也经过了许多时间了,但由于平时乱其八糟的事太多,现在就是报应。

这个项目名字叫做:强人隧道,是一个网站,主要的目的是用于学校将来进行计算机类人才选拔用的,同时外界企业也能通过这个平台找到自己合适的人选。网站也提供一个发表自己作品推广自我的空间。

这就是当初的设想,其实就是一个在线测试+作品展示的网站。测试题主要是外界各类认证考试和企业笔试的题目。注册成员在上面答题提高等级,以便我们选拔。

在你要鄙视这个东西是我要提醒你,这个网站是可以自动批改程序题的。要知道大多是的在线测试系统都非常愚蠢,简单的选择填空没有题,但像代码填空这类主观性的就基本上是废物。而这个网站有望突破这个限制。可以批改用户编写的代码,而且正确率在90%以上。

这里我也无心透露其中细节,由于最近做好了测试系统的前台界面,所以就发些图自我鼓励下~~

这东西还算用了些先进技术的,比如Ajax,而且是我的ReformPost的第一次对外应用^_^

 

我们需要什么?.net还是MFC?

最近渐渐的忙了起来,差点忘了每周一次的blog更新……

这段时间看了些.net方面的东西,同时自己也开始矛盾了

的确。光光用VS2005的对象浏览器去看.net framework 2.0的类库,给人的感觉只能用震撼2字形容了。同时体验了C#开发程序、ASP.net奇迹般的把web编程变成了事件驱动式。其强大和快捷性的确令人难于抗拒!

但是我心中总有个声音在警告我不要去过多涉足这项技术,虽然我知道这是未来的潮流所趋,如果不顾这些,自己就会变得落伍。想想也是,ASP、MFC这些似乎已经年级不小了。按照IT界的潜规则,似乎年龄就等于淘汰

而且.net那么强大的类库现成的放在那里,如果自己再完全重新去编别人都有现成类库的程序的确很傻。

但这似乎不能完全说服我的那种警觉。

这不禁令我想起了以前的VB6.0。我对VB6有着特别深厚的感情,虽然高二以后就没有用VB6了。但毕竟是靠VB6起家的。我编写的第一个程序、第一次了解什么叫做程序、第一次知道windows程序怎么开发、第一次写出个有实际意义的程序,都是从VB6开始的。

我想如果要我已开始就学C++,恐怕就不会喜欢程序设计。毕竟我不喜欢纯粹的编码设计,那和数学无异,VB的所见即所得使得当初我这个门外汉立刻对程序开发产生兴趣。

但现在VB6的结局大家都清楚,VB.net完全抛弃了VB一贯的COM构架的作风,成为.net的主力语言。当然作为MS这是必须也是必然的,同时也是好事。但随之而来的于以往vb6工程的不兼容性、语法的较大变革使得当初无数的VB开发者失望。

其实这也是所有高等应用开发所面临的问题:虽然一方面开发的高效、功能的强大、使用的简单的确吸引人,业界也往往将他们视作行业标准,不会.net/JAVA似乎就很难找工作了。但底层技术永远是别人控制的,只要别人愿意,这些一时间曾辉煌一时的技术瞬间就会被淘汰掉,并且这种淘汰是致命的,除非你转化到其他平台上去。

ASP.net的事件编程同样让我警惕,虽然这是今后B/S体系程序的奠基技术,但他隐藏了太多太多的细节。这很像Matrix里面,虽然人们可以十分正常安逸的活在母体创造的虚拟世界中,但总有人会冒着生命危险,不顾眼前的安逸,逃出母体去探究那真实的世界:虽然这世界已被机器占领,没有阳光,似乎是地狱。但他们却乐此不疲……

似乎我现在的状态和matrix中锡安的人们一样吧。宁愿自己用着老掉牙的ASP去手动处理每一件事情,宁愿用着繁琐的MFC开发别人C#拖拖鼠标就能搞定的事。但这种掌控全局的自由是绝对过瘾的!我宁愿身处Matrix之外,即使真实世界已被Matrix瓜分殆尽。

当然也有好消息,Flash也算是比较新的技术了,似乎这会是我的道路,毕竟.net的世界还是靠C/C++这种被业界一看似古董的语言构筑的

当然作为一种开发的需要,.net也会成为我开发的选择,但也仅是一种选择罢了

我写的TCP/IP教程

这是明天(2006.3.14)要在协会中做的讲座的PPT。目的很明确,因为这周日他们网管部要笔试,所以协会就趁这个时机办次辅导讲座。加上自己好久没亲自做讲座了~

这个讲座的题目叫做“互联网的故事”(好土的名字~~哎,我的语文水平就这么些),其实说白了就是此网络基础知识讲座。

加上以前和网络部有过一段不太好的经历,所以基本上我本人是和他们对着干的。

TCP/IP和网络方面的知识,比如那个人人看了都会头痛的OSI模型……所以我也没期望明天的讲座会如何如何,现在最担心的是没人去,要知道上次作亲手灭毒宝典时,协会宣传失误,弄得我差点气死……

这个讲座我认为最大的优势是直观性,因为每个概念点我都会有具体的演示和实践:用IRIS修探器抓包给他们看。同时会涉及一些黑客技术。

同时自我认为还是把其中相关知识的来龙去脉说清楚了,当然也有为了应试而专门整理的知识点。

里面的内容虽然算不上原创,但有些解释和归类和图片应该还是我自己独创出来的。

不过里面估计还是会犯一些错误的,所以请各位多多包涵,有问题直接留言提出,呵呵

下载地址:http://www.csksoft.net/data/legacyftp/Article/Presentation/internets_story.rar

注:我保留本文件的版权,请不要擅自传播。否则以后就不会公开提供这类信息了。

 

不想让这些成为以往的回忆

长期的网页制作也许是我对计算机这个东西已经有了厌倦。

当初在考虑制作blog基调的时候我特意选择了简洁白色基调,其中也有着我对以往的一些厌倦——对自己以往风格的审美疲劳。看过我以往作品的朋友应该知道这个网站向来是以深蓝等深色调为主的。但现在似乎这样的色调会让我觉得恶心——已经从生理上感觉到了,这令我想到背后日日夜夜的煎熬和痛苦,到也不一定是自己的网站。现在我喜欢简单的风格,至少是那种让我不会觉得头昏恶心的……

回想以往的日子,可谓比较自由:虽然以前水平没现在好,但至少能随心所欲的作东西。现在除了学校的PRP等项目,自己的ReformCore也其实是一种负担了。从没有觉得写代码会那么的痛苦过,不过换作VC可能就会好点。外面正是JAVA和.net的C#闹得正热之时,但我仍旧喜欢C++/C。C++/C是一种信仰,果然不假。虽然没有java和c#的易用和灵活,但作为一种高强度的系统语言,你几乎可以用它做任何事。虽然没有一堆功能强大而又方便的类库,但这又如何了?自己去完善每个细节也是享受。

可能有人会提醒我现在C++不太看好,C++程序员薪水如何如何。我不想理会这些。虽然都是事实。但没有人用C++去写个windows/Java VM,哪有机会让你去运行java和.net?2者本身就没有很多可比性,这样认为的人更多的只能反映其浮躁。如果有真有水平这些都是次要的

有点说的偏题了,最近室友迷上玩文曲星的“白金英雄坛”,就是以前成为GMUD的游戏。今天顺便上了久违的ggv.com。真是感慨万千。当年的GVMaker大奖赛还在举行,但可惜的是作品质量大不如前的,从奖金上就能看出这点。

“文曲星”这个词在当时已经不是一个电子词典的品牌了。它代表一种爱好,一群有着理想的人,一台基本上能和pc一样的机器。高三的时候父母不让我用电脑了,不过好在有文曲星在,接触过他的人知道,就这台160*80黑白LCD,3MHz 6502处理器,512k ram的机器竟然能随意下载程序、更新,修改内核,编写BASIC,运行LAVA虚拟机程序,看动画。更绝的是还有汇编编辑器和调试器。在那时几大文曲星爱好者网站:wqxnet和wqxsky为典型,更是把来自全国的软硬件高手聚集起来研究这看似不值一提的机器上来。

那时很多人可能没有在pc上编程的经历,但已经是GVBASIC的好手。文曲星上同样有下载、升级、破解、反汇编这些名词。更赞的是FC的超级马里也被移植了上来。这一切都在当时令它的爱好者为之欣喜。后来由LEE开发的LAVA语言和其虚拟机将更多的编程爱好者汇集了过来。它采用类似C的语言,可以在文曲星上运行高效率的程序,同时又能像JAVA一样跨平台运行(要知道文曲星型号很多)。

高三处于对lava的好奇,我也参与开发了Crazyball。这个大家都应该听说了。后来又发生了很多事情。

 

Crazyball

 

开发中的CrazyGT

在Crazyball获奖以后,我和几个网友便开始讨论开发第一个文曲星下的纯3d游戏:CrazyGT...

但好景不长,在此之前,wqxnet就因为经费和其他原因被迫关闭了,这无疑是爱好者社区的一大损失,但幸好lee所在的wqxsky还支撑着所有爱好者的梦想。

可是一年不到,wqxsky也应为同样的原因关闭了。当时可谓悲惨,虽然站长企图通过网络募捐继续维持,但往往到了这时,许多人就离开了,真正同意捐款的人寥寥无几。

而在开发CrazyGT的时候,我的NC2000c的排线断裂,后来尝试修复未遂。加上任务缠身,基本上不可能去继续开发。

这一切似乎就要成为历史了....

但今天我似乎又有了继续开发CrazyGT的冲动,一方面觉得目前参赛作品太少,一方面就是不希望让这些成为历史。文曲星上运行的程序难道就会比pc上的差,可能有人会认为那是小孩时代玩的东西,但这又如何?

作为wqxnet的前身,emsky目前发展壮大,也给了爱好者一个交流的平台。不过有些事情的确不容乐观,ggv的产品变化不大加上LEE本人从社区的消失无意是最大的打击。不过只要有人还在用wqx,一切都是值得的。

至少我不希望以后再想开发CrazyGT时只能发出叹息和无限的回忆了。不过一切要等我目前的项目过去了。

哎……人生啊,就是无奈中度过的

ajax缺陷的解决和自动xml分析器

可恶……你现在看到的文章之前我已经写过几乎一样的一篇,但随着IE突然崩溃,我也只好重新打了一篇,也就是你看到的……

最近要同时开发PRP的“强人隧道”网站、法学院网站的第2期开发,同时要管理计协,当然还有学业。所以基本上时间要精确到秒来用了。不过周末还是能和gf稍微过一点悠闲的生活,哪怕那只有短暂的2小时。

那么这个blog似乎又要死下去了,不过我承诺过每周至少一篇文章,所以就把最近开发中对ajax的体会和一些作品发布出来吧。

首先允许我评论下这个目前正被捧得大红大紫的AJAX技术。如果你不知道他是什么就先去google以下,关于他的教程和介绍到处都是。

ajax并不是最近才有的,更不是有些人所说的在asp.net中附带而来的。她很早就被MS采用,大家看看msdn网站的那个树形目录,如果你展开一个分支,它就会“非同步的”去更新这个分支的内容。我想似乎也只有js+xml才能做到吧。而且在我上高一时,第一次上msdn就有这个功能了,我现在读大二,那么就算算这项技术出现了多少年吧……

那么为什么他现在如此的红火呢?我想其中一个原因是gmail,他的web管理界面就是彻底的ajax应用。google似乎正企图破坏微软帝国的神话,成为新一代霸主,他对新技术的使用自然是空前的。第二个原因就是企图用这个技术来达到Flash网站同样的效果。也就是不需要刷新页面来获取新内容。Flash中可以采用loadMovie方法来加载新的对象,同时也支持xml文报(我的ReformPost就是很好的例子)。我想比起asp.net中的采用,更多的可能应该是需要模拟出和flash具有同样效果的页面罢了。

不过ajax似乎并没有传说的那么十全十美。

首先

它需要浏览器支持,并不是所有平台和所有浏览器都能显示ajax页面,而且一但不支持,整个页面可能都无法显示。

第二个缺陷

由于它不需要刷新页面而获得新的数据,很多人认为这有违于利用URL来唯一定位资源的规范。因为同一个url指向的页面可以用ajax显示截然不同的数据。那么你如果需要把你正在浏览的信息给别人看的话,复制url给他显然就是没有用的。

不过我并不这样认为,首先这并不是ajax才有的问题,使用flash的页面也是如此。而且所谓“有违于利用URL来唯一定位资源的规范”是错误的。我见过很多聪明的flash网站已经做到了解决方法,下面我稍微介绍一下:

如果你原先采用静态页面,那么很自然,每篇文章都是和url地址挂钩的:

比如本文保存在:http://www.csksoft.net/blog/post/XML_Parser_and_comments.html

那么用url地址就能来访问本文。

现在我把文章保存在数据库,采用asp页面动态的显示本文,那么利用QueryString还是能用url地址唯一的去定义本文:

http://www.csksoft.net/blog/cmd.asp?act=tb&id=84

那么在ajax和flash网站的情况下,我们也可以采用类似于QueryString的做法:把上面的?改为#即可

众所周知,url字符串中#字符之后的内容都会在发送http请求时被略去,所以网页的书签就是在页面url后面加上一个以#为前缀的参数,这样一方面不影响服务器获取正确的参数,另一方面可以在客户端利用JS来获取#之后的参数。

那么,在今后的flash网站中,或者今后本blog采用了ajax,这篇文章也能采用如下的url地址获得了:

http://www.csksoft.net/blog/index.asp#act=tb&id=84

不过这个页面目前是不起作用的。

下面提供一个能从像上面url地址格式中提取像指定参数数据的函数,它本是action代码,相信稍作修改就能用于js。

使用和转载时请保留我的作者信息。

//from ReformCore::mainsite

//Copyrights 2005-2006 CSK,csk@citiz.net

function GetQueryString(strURL:String, strStringName:String):String {
if (strURL == undefined || strURL == ) {
strURL = _root._url;
}
var strQueryStub:String;
strQueryStub = strURL.slice(strURL.lastIndexOf(#)+1);
if (strStringName == undefined || strStringName == ) {
return strQueryStub;
}
var nSubPosA:Number, nSubPosB:Number;
strQueryStub = &+strQueryStub;
nSubPosA = strQueryStub.lastIndexOf(&+strStringName+=);
if (nSubPosA == -1) {
return ;
}
nSubPosA += length(&+strStringName+=);
nSubPosB = strQueryStub.indexOf(&, nSubPosA);
if (nSubPosB == -1) {
nSubPosB = strQueryStub.length;
}
return unescape(strQueryStub.slice(nSubPosA, nSubPosB));
};

 

如果要获取www.csksoft.net/mypage#id=3 中的id的内容,只要这样写:

 

var id=GetQueryString(www.csksoft.net/mypage#id=3,id);

用了上述的方法,这个缺陷自然也就不复存在了

第三个缺陷

是由于很多情况下需要对xml文档进行翻译,因而即使像获取服务器时间这样简单的功能,也要专门写xml分析代码来从服务器传回的xml中得到需要的时间信息。

如果flash或者ajax页面需要采用高级的xml文报实现与服务器进行更强大的RPC远程交互(类似于SOAP),那么就需要编写常常的xml分析代码。

对于ReformPost,如果需要获得主服务器的时间,客户端的发送的文报是这样的:

<ReformCorePost>
<Type Ver=1.0>generaPost</Type>
<PosterInfo type=desktop;fla>FlashMainSite</PosterInfo>
<Core_RPC>
<Name>GetServerTime</Name>
<args />
</Core_RPC>
</ReformCorePost>

ReformCore传回的xml文报是这样的:

<ReformCorePost>
<Type Ver=1.0>CmdResponse</Type>
<PosterInfo type=WebCoreServer />
<RPC_result>
<DTYPE>date;servertime</DTYPE>
<CurrentTime>2006-3-5 15:20:09</CurrentTime>
</RPC_result>
</ReformCorePost>

如果要实现上面的xml交互,首先客户端必须编写生成指定格式xml的代码,而对于每种请求xml的不同,也需要不同的代码,同时分析服务器返回的xml也需要相当多的代码来完成。

这样无疑是加重了ajax开发的复杂性和延长了开发周期。

我在开发PRP项目时写了一套函数,它可以做到下面的功能:

1.如果我要生成如下的xml文档:

<MyXML>
<MyItem>
<Item>a</Item>
</MyItem>
</MyXML>

里用接下来提供的函数,开发者只需要写如下代码:

var objXML,objArglist;
objArglist = new Object();
objArglist.MyItem = new Object();
objArglist.MyItem.Item = a;
objXML=ConstructXmlDoc(MyXML,objArguList);

这样,上述xml已经自动产生并保存在objXML中了。这样就免去了繁琐的CreateElements、appendChild之类的操作函数了。

2.如果服务器传回了下面的xml文档:

<ReformCorePost>
<Type Ver=1.0>CmdResponse</Type>
<PosterInfo type=WebCoreServer />
<RPC_result>
<DTYPE>date;servertime</DTYPE>
<CurrentTime>2006-3-5 15:20:09</CurrentTime>
</RPC_result>
</ReformCorePost>
假设采用objResponseXML保存这个文报,那么采用下面代码:
var objParsedXML;
objParsedXML = ParseXml(objResponseXML);
上述XML已经自动转化为等价的object类型,如果我要读取xml中CurrentTime字段的数据,只需用代码:
var strCurrentTime = objParsedXML.RPC_result[0].CurrentTime[0].value;
是不是简单多了?
这两个函数就是将Object对象中的成员数据和xml文档进行了互换,由于篇幅有限,其中的函数我就作为附件给出下载地址。具体的使用可以直接来询问我。对于asp版本暂时不打算公开
转载和修改时请保留原作者信息。
上述函数库js下载地址:
http://www.csksoft.net/data/legacyftp/Products/code_and_lib/reformcore_xmlparser.rar
好了,终于写完了
分页:[«]1[»]

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)