Ginew.Z 的博客

          一切,為了讓生活更簡(jiǎn)單、更自然

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            21 Posts :: 0 Stories :: 14 Comments :: 0 Trackbacks

          2006年4月19日 #

          href="#" vs. href="javascript:void(0)"

          開發(fā)的時(shí)候有時(shí)需要用link(<a>)來(lái)觸發(fā)一些javascript事件,所以常常可以看到如下的代碼:

          <a href="javascript:void(0)" onclick="doSomething();returnfalse;">Link</a>

          這是一個(gè)曾經(jīng)被多次討論過(guò)的問(wèn)題,長(zhǎng)期以來(lái),我也一直是這樣寫的。讀了 >>a href=”javascript:void(0);” — avoid the void 之后,我認(rèn)同了作者的意見。下面的寫法確實(shí)更合理:

          <a href="#" onclick="doSomething();returnfalse;">Link</a>

          或者

          <script type="javascript">
          function doSomething() {
            //doSomething
            returnfalse;
          }
          </script>
          <a href="#" onclick="return doSomething();">Link</a>

          以往大家不使用"#"的問(wèn)題是,這將導(dǎo)致點(diǎn)擊鏈接時(shí)頁(yè)面跳回頁(yè)面頂部,但通過(guò) return false 語(yǔ)句將使得瀏覽器忽略鏈接的默認(rèn)動(dòng)作,從而避免了此問(wèn)題。

          youngpup 更有意思,他在>>How to Create Pop-Up Windows 中言辭激烈的倡導(dǎo)大家永遠(yuǎn)永遠(yuǎn)永遠(yuǎn)不要使用 javascript: 偽協(xié)議:

          Never, ever, ever use the javascript: pseudo-protocol for anything, ever ever ever ever again. Please. Pretty please.

          他的解決方案是:

          <a 
            href="http://google.com/" 
            onclick="window.open(this.href, 'popupwindow', 
            'width=400,height=300,scrollbars,resizable'); 
            returnfalse;">

          這樣的好處就是可以保存到書簽或者收藏夾,可以左鍵單擊,也可以右鍵使用!

          posted @ 2006-11-17 12:15 無(wú)風(fēng)之雨 閱讀(1105) | 評(píng)論 (2)編輯 收藏

          ???? 我們打算為用戶架設(shè)單獨(dú)的虛擬主機(jī)服務(wù)器,可以讓企業(yè)自主上傳jsp、htm、php等程序。其中resin用來(lái)做jsp的容器。
          ???? 由于是用戶自主通過(guò)FTP上傳程序,我們必須控制這些程序可以執(zhí)行的權(quán)限,不能讓用戶隨便瀏覽硬盤上的文件,但又要能讓resin可以正常運(yùn)行。比如:/data/user_a目錄中的程序,只能在/data/user_a目錄及其子目錄中讀寫,如果想要訪問(wèn)其他目錄,就沒(méi)有權(quán)限。
          ???? 通過(guò)研究resin的文檔以及JAVA的機(jī)制,我認(rèn)為要實(shí)現(xiàn)以上構(gòu)想,可以通過(guò)使用java權(quán)限管理器來(lái)構(gòu)建一個(gè)resin的沙箱來(lái)對(duì)java的具體操作進(jìn)行授權(quán)。
          參考文檔:http://www.caucho.com/resin-3.0/security/securitymanager.xtphttp://www.jscud.com/srun/news/viewhtml/3_2005_10/148.htm

          ???? 當(dāng)我認(rèn)為勝利在望的時(shí)候,發(fā)現(xiàn)resin好像不支持grant codeBase "file:xxxx 。

          grant codeBase "file:/data/ftpdata/user01.test.com/-" {
          ?permission java.io.FilePermission "/data/ftpdata/user01.test.com/-", "read,write,delete";
          };
          ???? 上面的語(yǔ)句,語(yǔ)法上沒(méi)有問(wèn)題,但就是不起作用。那個(gè)codebase目錄下的文件,對(duì)本目錄沒(méi)有任何權(quán)限。

          ??????? resin的官方論壇里面,有人在2001年,針對(duì)resin1.2.5就提出了和我一摸一樣的疑問(wèn)(http://www.caucho.com/support/resin-interest/0105/0106.html),作者發(fā)現(xiàn)問(wèn)題是由于resin的classloader是非安全的,因此改了resin原文件后解決了問(wèn)題(http://www.caucho.com/support/resin-interest/0105/0112.html),但是我看resin3的源代碼,里面已經(jīng)基于java.security.SecureClassLoader,因此應(yīng)該不是這個(gè)原因了。
          ???? 以下是我的resin.policy文件:

          grant codeBase "file:${java.home}/lib/-" {
          ?permission java.security.AllPermission;
          };

          grant codeBase "file:${java.home}/jre/lib/-" {
          ?permission java.security.AllPermission;
          };

          grant codeBase "file:${resin.home}/lib/-" {
          ?permission java.security.AllPermission;
          };

          grant {
          ?permission java.util.PropertyPermission "*", "read";
          ?permission java.io.SerializablePermission "enableSubstitution";
          ?permission java.lang.reflect.ReflectPermission "suppressAccessChecks";?
          ?permission java.lang.RuntimePermission "accessClassInPackage.*";
          ?permission java.lang.RuntimePermission "getClassLoader";
          ?permission java.lang.RuntimePermission "accessDeclaredMembers";
          ?permission java.lang.RuntimePermission "modifyThreadGroup";
          ?permission java.lang.RuntimePermission "setContextClassLoader";
          ?permission java.lang.RuntimePermission "setIO";
          ?permission java.lang.RuntimePermission "stopThread";
          ?permission java.lang.RuntimePermission "createClassLoader";
          ?permission java.lang.RuntimePermission "getProtectionDomain";
          ?permission java.lang.RuntimePermission "defineClassInPackage";
          ?permission java.security.SecurityPermission "putProviderProperty.SunJCE";
          ?permission java.security.SecurityPermission "insertProvider.SunJCE";
          ?permission java.util.logging.LoggingPermission "control";
          ?permission java.lang.RuntimePermission "getAttribute";
          ?permission java.util.PropertyPermission "jaxp.debug", "read";
          ?permission ognl.OgnlInvokePermission "invoke.*";
          ?permission java.net.SocketPermission "localhost:3306","connect";
          ?permission java.io.FilePermission "${resin.home}/-", "read";
          ?permission java.io.FilePermission "${java.home}/-", "read";
          ?permission java.io.FilePermission "/tmp/-","read,write,delete";
          ?permission java.io.FilePermission "/tmp","read,write,delete";
          ?permission java.io.FilePermission ".","read";
          ?permission java.io.FilePermission "/home/apps/java/jdk/lib/tools.jar","read";
          ?permission java.io.FilePermission "/bin/sh", "read,execute";
          };

          //以下語(yǔ)句沒(méi)有任何作用,/data/ftpdata/user01.test.com/下的jsp對(duì)這個(gè)目錄沒(méi)有讀的權(quán)限
          grant codeBase "file:/data/ftpdata/user01.test.com/-" {
          ?permission java.io.FilePermission "/data/ftpdata/user01.test.com/-", "read,write,delete";
          };

          posted @ 2006-06-09 11:00 無(wú)風(fēng)之雨 閱讀(692) | 評(píng)論 (2)編輯 收藏

          要了解GPL,一般地,您沒(méi)有必要耐心閱讀原版的GPL協(xié)議,因?yàn)?GPL 無(wú)非交待了幾個(gè)原則:

          • 確保軟件自始至終都以開放源代碼形式發(fā)布,保護(hù)開發(fā)成果不被竊取用作商業(yè)發(fā)售。任何一套軟件,只要其中使用了受 GPL 協(xié)議保護(hù)的第三方軟件的源程序,并向非開發(fā)人員發(fā)布時(shí),軟件本身也就自動(dòng)成為受 GPL 保護(hù)并且約束的實(shí)體。也就是說(shuō),此時(shí)它必須開放源代碼。

          • GPL 大致就是一個(gè)左側(cè)版權(quán)(Copyleft,或譯為“反版權(quán)”、“版權(quán)屬左”、“版權(quán)所無(wú)”、“版責(zé)”等)的體現(xiàn)。你可以去掉所有原作的版權(quán) 信息,只要你保持開源,并且隨源代碼、二進(jìn)制版附上 GPL 的許可證就行,讓后人可以很明確地得知此軟件的授權(quán)信息。GPL 精髓就是,只要使軟件在完整開源 的情況下,盡可能使使用者得到自由發(fā)揮的空間,使軟件得到更快更好的發(fā)展。

          • 無(wú)論軟件以何種形式發(fā)布,都必須同時(shí)附上源代碼。例如在 Web 上提供下載,就必須在二進(jìn)制版本(如果有的話)下載的同一個(gè)頁(yè)面,清楚地提供源代碼下載的鏈接。如果以光盤形式發(fā)布,就必須同時(shí)附上源文件的光盤。

          • 開發(fā)或維護(hù)遵循 GPL 協(xié)議開發(fā)的軟件的公司或個(gè)人,可以對(duì)使用者收取一定的服務(wù)費(fèi)用。但還是一句老話——必須無(wú)償提供軟件的完整源代碼,不得將源代碼與服務(wù)做捆綁或任何變相捆綁銷售。
          posted @ 2006-05-16 16:50 無(wú)風(fēng)之雨 閱讀(686) | 評(píng)論 (0)編輯 收藏

          ?

          posted @ 2006-05-14 11:28 無(wú)風(fēng)之雨 閱讀(282) | 評(píng)論 (0)編輯 收藏

          ??????? 今天新頁(yè)面上線,很多同事報(bào)告說(shuō)頁(yè)面打開到一半,經(jīng)常跳出無(wú)法打開Internet站點(diǎn)的錯(cuò)誤,然后頁(yè)面會(huì)跳轉(zhuǎn)到DNS錯(cuò)誤的頁(yè)面。

          ????? notload.jpg
          ????????
          ??????? 這個(gè)問(wèn)題我以前遇到過(guò),一直沒(méi)有詳細(xì)的去深究原因,只是以為是服務(wù)器關(guān)閉連接太快的原因。今天發(fā)現(xiàn)這個(gè)問(wèn)題出的很頻繁,服務(wù)器方面沒(méi)有改什么,只是上傳了新的頁(yè)面程序而已,應(yīng)該不會(huì)和服務(wù)器有關(guān)。在對(duì)頁(yè)面進(jìn)行分析,并搜索了一下網(wǎng)上,發(fā)現(xiàn)原來(lái)是js在document還沒(méi)完全load完的時(shí)候就試圖改變其值導(dǎo)致。

          ??????? 因此對(duì)js做如下改變:

          原js:

          ???? window.settimeout("go()",500);
          ???? function go(){
          ??? .......
          ???? }

          改成:

          var go_i=window.setInterval("go()",500);
          function go(){
          ???if(document.readyState=="complete"){
          ????? window.clearInterval(go2_i);
          ??? }
          ????else return;
          ??? ........
          }
          目的就是讓他一定要在document完成后才執(zhí)行那個(gè)操作
          posted @ 2006-04-19 18:14 無(wú)風(fēng)之雨 閱讀(6923) | 評(píng)論 (6)編輯 收藏

          主站蜘蛛池模板: 海宁市| 嘉义市| 五莲县| 微山县| 渝北区| 黔南| 仪征市| 麦盖提县| 新密市| 桐梓县| 七台河市| 全州县| 搜索| 余庆县| 文昌市| 会理县| 镇赉县| 东兰县| 麻城市| 蓬莱市| 蒙城县| 通辽市| 乌苏市| 蓬溪县| 黎平县| 哈尔滨市| 桃园县| 长宁区| 襄汾县| 甘孜| 安义县| 密山市| 云阳县| 寻甸| 合川市| 五家渠市| 青岛市| 海晏县| 赞皇县| 莱阳市| 平潭县|