存档

2008年8月 的存档

做网站的时候考虑过用浮动层,但在FF中一直不能显示,所以放弃了这个想法,今天该站的时候看见同类网站中都出现了产品介绍的浮动层,但无一列外在FF中全死,但用户基本上都用IE,我再不做就显的站落伍了。。。
上网查了下资料,FF也支持ClientX,汗,以前我以为它支持持PageX。。。
这下就好办了,用法差不多
IE event.clientX
FF e.clientX
用的时候,obj.onmouseover=function(e){e=e||window.event;alert(e.clientX);}
下面是我在网站中的代码,完美支持。。。

document.writeln("<style type=text/css>");
document.writeln("#oparent{position:absolute;z-index:200;width:200px;background:#FFF;border:#CCC solid 4px;padding:0px;}#oparent img{width:200px;margin:0px;}#oparent div div{text-align:left;margin:2px 4px 0px 4px;}")
document.writeln("</style>");
document.writeln(’<div id="oparent"></div>’);
var oparent=document.getElementById("oparent");
function ShiChangJs(){
var o=_Get("div","tagname",_Get("ShiChangAll"));
for(i=0;i<o .length;i++){
if(o[i].getAttribute("rel")){
o[i].onmouseover=function(ent){
ent=ent||window.event;
oparent.innerHTML=this.getAttribute("rel");
oparent.style.left=document.documentElement.scrollLeft+10+ent.clientX+"px";
oparent.style.top=document.documentElement.scrollTop+10+ent.clientY+"px";
oparent.style.display="block";
}
o[i].onmouseout=function(){
oparent.style.display="none";
}
}
}
}
ShiChangJs();

八 17th, 2008 | Filed under Experience(经验)

 
最近做了一些javascript相关的工作,把收获和大家分享一下,感谢下meizz,他的框架jsframework给我提供了许多现成的工具,本文转自yizhu2000的博客
 
title这个元素比较特殊
如果title中有经过htmlencode的字符,通过document.title获得的内容将会自动解码,并且在ie中通过给title加上一个id然后用document.getElementById(titleid).innerHTML来获得其中内容也仍然是已经解码的,而firefox则不会
 
<html>
<head>
<title id=”tt”> &lt;iframe src=&quot;www.baidu.com&quot;/&gt </title>
</head>
<body>
<div id=”dd”> &lt;iframe src=&quot;www.baidu.com&quot;/&gt</div>
document.title:<input id=”disp1″ /><br />
document.getElementById(titleid):<input id=”disp2″ /><br/>
document.getElementbyId(divid):<input id=”disp3″ />
<script type=”text/javascript” >
document.getElementById(“disp1“).value=document.title;
document.getElementById(“disp2“).value=document.getElementById(“tt“).innerHTML;
document.getElementById(“disp3“).value=document.getElementById(“dd“).innerHTML;
</script>
</body>
</html> 

ie中的结果

firefox的结果

 
xhtml不支持document.body.scrollTop
当为html文档加上如下头以支持xhtml过渡标准时候,使用document.body.scrollTop值始终为0
<!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”zh-CN” lang=”zh-CN”> 
这是document.body.scrollTop始终为0,这时需要用document.documentElement.scrollTop才能获得正确的值
而如果不加xhtml的申明,document.documentElement.scrollTop将为0
下面这个getScrollXY()方法可以包装这个变化
 
<html>
<body>
<div id=”dd”> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</div>
scrollLeft:<input id=”disp1″ /><br />
scrollTop:<input id=”disp2″ /><br/>
<button onclick=”onClick()” >获得scrollXY</button>
<script type=”text/javascript” >
function getScrollXY(){
var x,y;
if(document.body.scrollTop){
  x=document.body.scrollLeft;
  y=document.body.scrollTop;
}
else{
  x=document.documentElement.scrollLeft;
  y=document.documentElement.scrollTop;
}
return {x:x,y:y};

function onClick(){
document.getElementById(“disp1“).value=getScrollXY().x;
document.getElementById(“disp2“).value=getScrollXY().y;
}
</script>
</body>
</html> 

 

 
firefox的outerHTML
firefox没有outerHTML这个很有用的属性,用下面这个方法可以让你的firefox也具有这个属性
 
if(typeof(HTMLElement)!=“undefined“ && !window.opera){
HTMLElement.prototype.__defineGetter__(“outerHTML“,function()
  {
    var a=this.attributes, str=“<“+this.tagName, i=0;for(;i<a.length;i++)
    if(a[i].specified) str+=“ “+a[i].name+‘=”‘+a[i].value+‘“‘;
    if(!this.canHaveChildren) return str+“ />“;
    return str+“>“+this.innerHTML+“</“+this.tagName+“>“;
  }); 
   HTMLElement.prototype.__defineGetter__(“canHaveChildren“,function()
  {
    switch(this.tagName.toLowerCase())
    {
      case “area“: case “base“:  case “basefont“:
      case “col“:  case “frame“: case “hr“:
      case “img“:  case “br“:    case “input“:
      case “link“: case “meta“:  case “isindex“:
      case “param“:return false;
    } return true;
  });
}

 
firefox和ie的事件
firefox和ie的事件对象稍微不同,比方说下面这个在ie下获得鼠标位置的方法
<button onclick=”onClick()” >获得鼠标点击横坐标</button>
<script type=”text/javascript”>
function onclick(){
alert(event.clientX);
}
</script>

需要改成
<button onclick=”onClick(event)”>获得OuterHTML</button>
<script type=”text/javascript”>
function onclick(event){
alert(event.clientX);
}
</script>
才能在两种浏览器下使用
 children与childNodes
ie提供的children,childNodes和firefox下的childNodes的行为是有区别的,firefox下childNodes会把换行和空白字符都算作父节点的子节点,而ie的childNodes和children不会
比如
<div id=”dd”>
<div>yizhu2000</div>
</div>
id为dd的div在ie下用childNodes查看,其子节点数为1,而ff下为三,我们可以从ff的dom查看器里面看到他的childNodes为["\n ", div, "\n"]
要在ff下模拟children的属性我们可以这样做
 
if(typeof(HTMLElement)!=“undefined“ && !window.opera){
HTMLElement.prototype.__defineGetter__(“children“,function()
{
   for(var a=[],j=0,n,i=0; i<this.childNodes.length; i++){
   n=this.childNodes[i];if(n.nodeType==1){a[j++]=n;if(n.name){
   if(!a[n.name])a[n.name]=[]; a[n.name][a[n.name].length]=n;}
   if(n.id) a[n.id]=n;}}return a;
}); 

 
几个有用的工具函数
在ff下模拟ie的insertAdjacentHTML

if(typeof(HTMLElement)!=“undefined“ && !window.opera){
HTMLElement.prototype.insertAdjacentHTML=function(where, html)
{
   var e=this.ownerDocument.createRange();
   e.setStartBefore(this);
   e=e.createContextualFragment(html);
   switch (where)
   {
     case ‘beforeBegin‘: this.parentNode.insertBefore(e, this);break;
     case ‘afterBegin‘: this.insertBefore(e, this.firstChild); break;
     case ‘beforeEnd‘: this.appendChild(e); break;
     case ‘afterEnd‘:
       if(!this.nextSibling) this.parentNode.appendChild(e);
       else this.parentNode.insertBefore(e, this.nextSibling); break;
   }
}; 

模拟DotNet的string.format
 
String.prototype.format=function()
{
  if(arguments.length==0) return this;
  for(var s=this, i=0; i<arguments.length; i++)
    s=s.replace(new RegExp(“\\{“+i+“\\}“,“g“), arguments[i]);
  return s;
}; 
 
这样我们就可以在程序里使用诸如:
“username:{0} nickname {1}”.format(“yizhu2000″,”二毛五”)
 
资源
meizz的blog http://blog.csdn.net/meizz/

八 17th, 2008 | Filed under Share(分享)

 不知道大家注意没有,现在很多SNS网站都提供了API系统,这样即给我们小站开展SNS业务提供了一次机会(以往模式是想都不敢想的)。因一个人能力有限,所以诚邀有识之士加入我们的团队,在SNS的发展历史上留下我们的足迹。
联系人:苗启源
E-mail:mqycn@126.com
合作项目介绍:http://miaoqiyuan.cn/p/sns-api/
索取项目方案请与我联系。 
 
开放API的风潮开始在国内涌动,开放api是一种很创新的盈利模式,同时给很多第三方开发者很多创业机会,所以还是一种共赢的好模式。马云说,互联网的精髓在于开放、共享和责任。而开放api恰好使得校内网这样的真实SNS满足了开放性、共享和责任;真实本身就意味着责任,开放意味着产业链共赢,共享是sns的最热度的应用。
业界研讨开放API,趋势不可阻挡
校内网5月30日宣布开放了API,他们专门开发了一套XNML的标记系统,用xnml可以比较容易开发出基于校内网api的应用,比如游戏、widget、活动等等。校内网一直被称作中国的facebook,facebook开放api催生了很多facebook应用开发的专门团队,并且轻松实现了盈利,校内网开放api相信也是良好的开端。
国内最大的开发者社区CSDN组织了开放API研讨会,云集谷歌、校内网等各大网站cto和技术高手,大家对未来互联网的认识和开放的价值都表示了认同,虽然各大高手对开放的定义并不完全一致,但是开放api的必要性是被肯定的。
开放意味着共赢,开放意味着整合
由于国内sns热度高涨,过去两个月里出现了一大批sns,但是在经过了一段时间热情以后,人们发现sns实在太多了,而sns的小运营者们也开始头疼:只凑了热闹,没法拿到钱,用户就疲倦了。
为什么会这样?
这是由于SNS的特点和本质决定的。互联网是无疆界的,全国各地的网友在一起交流,远在全球各地的同学在一起交流,这也是校内网这样的SNS网站的价值所在,因为能够涵盖你要找的人和要找你的人。这些是小网站无法实现的,所以sns需要统一的大平台。
开放api是大平台发展、共享的途径,能够实现产业链共赢。让开发者开发一个有价值应用,付出的成本更少,成功的机会更多,如果一旦开发出的应用被大量校内用户使用,那么这个开发者很快就会成为百万富翁了。
开放API同时也是一个SNS产业整合的途径,对于那些不开放api的SNS来说是一个打击,那些不开放的sns会被认为是自私的或是没有技术实力的。开放API促使sns产业的整合加快,技术、资金、运营都是要求越来越高的,所以笔者建议大家不要盲目跟风SNS,应该基于校内网这样的大平台开放有价值的应用,这样成本低、价值高、风险少,同时成为百万富翁的机会比单干高的多!
 

八 16th, 2008 | Filed under Thinks(想法)

游戏CDKEY发布平台(FlyCat Game CMS) 由苗启源独立开发两个星期,现在程序部分完成,等模板文件完成,程序即发布。
基于ASP+Accesee开发,支持插件、模板、生成静态页。
用户可以用此程序在通过游戏推广平台获利,本程序永久免费。
游戏领取方式以插件的方式管理,用户可以根据自己的实际需要,选择添加删除游戏领取插件,本系统集成了三个游戏序列号领取插件,静态页、框架页、通过QQ领取。
所有网页内容都可通过模板定制,现已支持数十个标签,足以满足用户的需要。 
改CMS预计下周一正式发布,编辑器实用了当前最流行的FCKEditor,后台完美支持FF,IE5,IE6,IE7,Opera。

八 15th, 2008 | Filed under ASP, Life(生活), Share(分享)

众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页
   提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来
   被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。
  
   第一种:用RegSrv32 /u C:\\Windows\\SYSTEM\\scrrun.dll(win98路径)来注销该组
   件。此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招
  
   第二种:修改Progid的值,在ASP里调用组件的方式通常是 Set 对象名=Server.
   CreateObject(“Progid”),这时候我们就可以通过修改注册表中的Progid值从达
   到禁用该组件的方法。在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROO
   T\\Scripting.FileSystemObject,这时候我们就可以更改该Progid的值了,如改
   成Scripting.FileSystemObject8。这样在ASP页里就这样调用了:
   <%@ Language=Vbscript%>
   <%
   Set Fs=Server.CreateObject(“Scripting.FileSystemObject8″)
   %>
   (如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重
   启后看效果。)
   这时候我们看看还是用原来的调用方法的结果:
   <%@ Language=Vbscript%>
   <%
   Set Fs=Server.CreateObject(“Scripting.FileSystemObject”)
   %>
   这时候的运行结果为:
   服务器对象 错误 \’ASP 0177 : 800401f3\’
  
   Server.CreateObject 失败
  
   /aspimage/testfile2.asp, 行3
  
   800401f3
   (OK,达到我们的要求)
   该方法由于本人迟了两步,结果就让别人抢着回答了,这样极大的刺激了我,结
   果就产生了第三种方法。
  
   第三种:细心的高手们会想,既然能通过修改Progid值来禁用该组件,那Clsid是
   否也可以来修改呢?(OK,你想得和我一样)我们知道,除了CreateObject方法以
   外,也可以使用一般的<object>标注建立一个组件,我们可以在ASP里面使用HTM
   L的<object>标注,以便在网页中加入一个组件。方法是:
   <object runat=server id=fs1 scope=page progid=”Scripting.FileSystemObj
   ect”></object>
   [...]

八 11th, 2008 | Filed under Experience(经验), Share(分享)
标签: , , , ,

解决windows2003最大只能上载200K的限制。先在服务里关闭iis admin service服务找到windows\system32\inesrv\下的metabase.xml, 打开,找到ASPMaxRequestEntityAllowed 把他修改为需要的值,然后重启iis admin service服务 1、在web服务扩展 允许 active server pages和在服务器端的包含文件
2、修改各站点的属性 主目录-配置-选项-启用父路径
3、使之可以上传大于 200k的文件(修改成您要的大小就可以了,如在后面补两个0,就允许20m了) c:\WINDOWS\system32\inetsrv\MetaBase.xml
(企业版的windows2003在第592行,默认为 AspMaxRequestEntityAllowed=”204800″ 即200K
将其加两个0,即改为,现在最大就可以上载20M了。
AspMaxRequestEntityAllowed=”20480000″

八 11th, 2008 | Filed under Experience(经验), Share(分享)
标签: , , ,