emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          公告

          常用鏈接

          留言簿(92)

          隨筆分類(20)

          隨筆檔案(171)

          文章分類(89)

          文章檔案(103)

          相冊

          收藏夾(46)

          友情連接

          收藏

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          一個簡單的UserData管理器,可以save、load和delete數據。
          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE>?UserData?manager?</TITLE>
          <META?NAME="Generator"?CONTENT="EditPlus">
          <META?NAME="Author"?CONTENT="emu">
          <META?NAME="Keywords"?CONTENT="IE?USER?DATA?manager">
          <META?NAME="Description"?CONTENT="UserData?manager">
          </HEAD>

          <BODY>
          <SCRIPT?LANGUAGE="JavaScript">
          <!--
          document.documentElement.addBehavior(
          "#default#userdata");

          function??saveUserData(key,?value){
          ??
          var?ex;?
          ????
          with(document.documentElement)try?{
          ????load(key);
          ????setAttribute(
          "value",?value);
          ????save(key);
          ????
          return??getAttribute("value");
          ??}
          ??
          catch?(ex){alert(ex.message)}
          }

          function?loadUserData(key){
          ??
          var?ex;?
          ????
          with(document.documentElement)try{
          ????load(key);
          ????
          return?getAttribute("value");
          ??}
          ??
          catch?(ex){alert(ex.message);return?null;}
          }

          function??deleteUserData(key){
          ??
          var?ex;?
          ????
          with(document.documentElement)try{
          ??????load(key);
          ????expires?
          =?new?Date(315532799000).toUTCString();
          ????save(key);
          ??}
          ??
          catch?(ex){alert(ex.message);}
          }?

          saveUserData(
          "emu","hello?world?!")
          alert(loadUserData(
          "emu"))
          deleteUserData(
          "emu")
          alert(loadUserData(
          "emu"))

          //-->
          </SCRIPT>
          </BODY>
          </HTML>


          注意這一行: expires = new Date(315532799000).toUTCString();

          315532799000 是格林威治時間1979年12月31日23時59分59秒。這是刪除UserData的最靠前的一個有效expires時間了,再往前一毫秒,expires = new Date(315532798999).toUTCString(); 就刪不掉userdata了,可以認為是IE的一個bug。所以我們刪除userdata的時候不能像刪除cookie一樣,用new Date(0)來制造過期時間了。

          一個等效的寫法是 expires = new Date(1980,0,1,7,59,59).toUTCString();? 用toGMTString也一樣。

          如果需要按照user來管理userdata,可以這樣:

          ?

          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE>?UserData?manager?</TITLE>
          <META?NAME="Generator"?CONTENT="EditPlus">
          <META?NAME="Author"?CONTENT="emu">
          <META?NAME="Keywords"?CONTENT="IE?USER?DATA?manager">
          <META?NAME="Description"?CONTENT="UserData?manager">
          </HEAD>

          <BODY>
          <SCRIPT?LANGUAGE="JavaScript">
          <!--
          document.documentElement.addBehavior(
          "#default#userdata");

          function??saveUserData(user,key,value){
          ??
          var?ex;?
          ????
          with(document.documentElement)try?{
          ????load(user);
          ????setAttribute(key,?value);
          ????save(user);
          ????
          return??getAttribute("value");
          ??}
          ??
          catch?(ex){alert(ex.message)}
          }

          function?loadUserData(user,key){
          ??
          var?ex;?
          ????
          with(document.documentElement)try{
          ????load(user);
          ????
          return?getAttribute(key);
          ??}
          ??
          catch?(ex){alert(ex.message);return?null;}
          }

          function??deleteUserData(user){
          ??
          var?ex;?
          ????
          with(document.documentElement)try{
          ??????load(user);
          ????expires?
          =?new?Date(315532799000).toGMTString();
          ????save(user);
          ??}
          ??
          catch?(ex){alert(ex.message);}
          }?

          saveUserData(
          "emu","Name","emu?!")
          alert(loadUserData(
          "emu","Name"))
          saveUserData(
          "emu","blog","http://www.aygfsteel.com/emu")
          alert(loadUserData(
          "emu","blog"))

          //-->
          </SCRIPT>
          </BODY>
          </HTML>


          兼容上面兩種的寫法是這樣:

          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE>?UserData?manager?</TITLE>
          <META?NAME="Generator"?CONTENT="EditPlus">
          <META?NAME="Author"?CONTENT="emu">
          <META?NAME="Keywords"?CONTENT="IE?USER?DATA?manager">
          <META?NAME="Description"?CONTENT="UserData?manager">
          </HEAD>

          <BODY>
          <SCRIPT?LANGUAGE="JavaScript">
          <!--
          document.documentElement.addBehavior(
          "#default#userdata");

          function??saveUserData(user,key,value){
          ??
          var?ex;?
          ????
          if(!value){
          ????????value?
          =?key;key=user;user="defaultUser"
          ????}
          ????
          with(document.documentElement)try?{
          ????load(user);
          ????expires?
          =?new?Date(new?Date()-(-86400000)).toGMTString();
          ????setAttribute(key,?value);
          ????save(user);
          ????
          return??getAttribute("value");
          ??}
          ??
          catch?(ex){alert(ex)}
          }

          function?loadUserData(user,key){
          ????
          if(!key){
          ????????key
          =user;user="defaultUser";
          ????}
          ??
          var?ex;?
          ????
          with(document.documentElement)try{
          ????load(user);
          ????
          return?getAttribute(key);
          ??}
          ??
          catch?(ex){alert(ex.message);return?null;}
          }

          function??deleteUserData(user){
          ??
          var?ex;?
          ????
          if(!user)user="defaultUser";
          ????
          with(document.documentElement)try{
          ??????load(user);
          ????expires?
          =?new?Date(new?Date()-86400000).toGMTString();
          ????save(user);
          ??}
          ??
          catch?(ex){alert(ex.message);}
          }?

          saveUserData(
          "emu","Name","emu?!")
          alert(loadUserData(
          "emu","Name"))
          deleteUserData(
          "emu")
          alert(loadUserData(
          "emu","Name"))
          saveUserData(
          "emu","blog","http://www.aygfsteel.com/emu")
          alert(loadUserData(
          "emu","blog"))
          deleteUserData(
          "emu")
          alert(loadUserData(
          "emu","blog"))

          saveUserData(
          "emu_articles","http://www.aygfsteel.com/emu/category/1383.html")
          alert(loadUserData(
          "emu_articles"))
          deleteUserData()
          alert(loadUserData(
          "emu_articles"))
          //-->
          </SCRIPT>
          </BODY>
          </HTML>
          posted on 2006-04-05 22:09 emu 閱讀(3849) 評論(2)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術

          評論

          # re: UserData 管理器和IE一個相關的bug 2009-12-03 10:31 方向
          最后兼容的寫法, return getAttribute("value");這句是不是有問題的???
          應該是return getAttribute(key);  回復  更多評論
            

          # re: UserData 管理器和IE一個相關的bug 2013-07-14 20:13 張一凡
          鵝鵝鵝熱熱  回復  更多評論
            

          主站蜘蛛池模板: 南和县| 横峰县| 富民县| 浙江省| 彭阳县| 孝感市| 武安市| 宜黄县| 改则县| 呼图壁县| 平遥县| 苏州市| 邓州市| 济阳县| 五莲县| 佛冈县| 宁远县| 陇川县| 丘北县| 呈贡县| 铅山县| 沧州市| 湟源县| 陕西省| 大田县| 桓仁| 慈利县| 乌兰察布市| 大洼县| 平利县| 云霄县| 普格县| 关岭| 婺源县| 昭平县| 台湾省| 天镇县| 宁城县| 博野县| 黑河市| 甘南县|