2015年5月15日 星期五

[C#] System.Web.HttpException: URL 編碼型式資料無效。


System.Web.HttpException: URL 編碼型式資料無效。 ---> System.InvalidOperationException: 由於該物件目前的狀態,導致作業無效。


經查證後,發現是2012年一月左右,微軟針對.NET做了資安漏洞更新,於客戶端POST回來的參數資料數有了限制;

該設定的默認值剛好為「1000」,如果是.NET 2.0以上的版本,請修改 web.config ,並在 <appSettings> 區段加上 aspnet:MaxHttpCollectionKeys 即可:
<appSettings> 
  <add key="aspnet:MaxHttpCollectionKeys" value="2500" /> 
</appSettings>


如果要在 .NET 1.1放寬限制,則須做以下設定 (需將機器重開機):

注意 如果您是在 x86 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
如果您是在 x64 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys


參考資料:

https://support.microsoft.com/zh-tw/kb/2661403/zh-tw

http://blog.miniasp.com/post/2012/01/01/Efficient-Denial-of-Service-Attacks-on-Web-Application-Platforms.aspx



2015年3月8日 星期日

用RAM虛擬硬碟提升VS執行效能

form:  http://blog.miniasp.com/post/2008/04/05/Useful-tools-Gavotte-Ramdisk.aspx



到 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的 <system.web>
新增 <compilation tempDirectory="Q:\Temporary ASP.NET Files\" />

這樣不管是 IIS 或在 Visual Studio 都一樣



2015年3月6日 星期五

開啟Windows內建的隱藏版磁碟清理程式

轉自: http://steachs.com/archives/1493



要開啟隱藏版的磁碟清理程式,先在開始功能表輸入『cleanmgr /sageset:99』。
clean-02

然後會出現磁碟清理設定,不過不同的是多了非常多選項,將欲清理的部份都勾選之後按下確定,全部的項目如下:
1. Temporary Steup Files
2. Downloaded Program Files
3. Temporary Internet Files
4. 離線網頁
5. Debug Dump Files
6. 之前的 Windows 安裝
7. 資源回收桶
8. 系統錯誤記憶體傾印檔案
9. 系統錯誤小型傾印檔案
10. 暫存檔案
11. 遊戲統計資料檔案
12. 暫存的 Windows 安裝檔案
13. 縮圖
14. 由每個 Windows 升級所捨棄的檔案
15. 每個使用者保存的 Windows 錯誤報告檔案
16. 每個使用者排入佇列的 Windows 錯誤報告檔案
17. 系統保存的 Windows 錯誤報告檔案
18. 每個排入佇列的 Windows 錯誤報告檔案
19. Windows Upgrade Log Files
clean-03

設定完要清理的項目後再輸入『cleanmgr /sagerun:99』執行清理,就會開始清理所勾選的項目,之後如果要重新設定清理項目,一樣回到上一個指令再設定即可。

Chrome 的 User Data資料夾 越來越肥?

轉自 : http://home.gamer.com.tw/creationDetail.php?sn=2195888


C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\File System\002\p\00

這個資料夾,有點肥XD

PS:我的OS還是XP(我是XP愛好者XD)、瀏灠器:Google Chrome

裡面放了一堆數字名稱檔,如下圖(事後補拍只有1個檔)


上網google查資料,才知道
這是Google Chrome在Mega下載資料時,所產生的暫存檔
簡單來說就是
如果你從Mega下載了1G的資料,那麼實際在你的電腦裡就會佔了2G的空間
以此類推,下載有10G、就會佔20G‧‧‧被吃掉的空間,狠可怕
這個暫存檔並不會因為下載完資料就會自動刪除
如果一直沒理,似乎要很久或根本不會消失
所以我發現後就自己手動刪除了

刪除時要注意的就是每個人的路徑位置可能略有不同
C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\File System\002\p\00

紅色字體部份,我的路徑是002,也有可能是000、001之類

因為每個人的路徑不一定都會完全一樣
所以也可以自己從C槽根目錄一層一層點開來追
不過這個做法就需要先打開任一資料夾:
工具→資料夾選項→檢示→顯示所有檔案和資料夾(點選)
才有辦法一層一層點開來追,因為有些資料夾是隱藏的

至於Win7+Google Chrome,我google查到的路徑是:
C:\Users\XXXX(你電腦名稱)\AppData\Local\Google\Chrome\User Data\Default\
File System\000\t\00

前面紅字要自己修改
000應該也有可能不一樣(?

2015年2月9日 星期一

[C#] IEnumerable 和 List

from: http://www.dotblogs.com.tw/city7/archive/2013/11/29/131970.aspx


因為 array 與 List<T> 都有實作 IEnumerable 介面,
將方法的引數宣告為 IEnumerable 便可通吃 array 與 List<T>,
如下:

int[] a = { 1, 2, 3 };
List<int> b = new List<int> { 4, 5, 6 };

ListAllElement(a);//可帶array
ListAllElement(b);//可帶List

---------------------------

private void ListAllElement(IEnumerable<int> elements)
{
    foreach (int element in elements)
    {
        Console.WriteLine(element);
    }
}


當然啦, 不只 List<T>, 只要是有實作 IEnumerable 介面的型別都適用。



其實我對於IEnumerable 的用途感受並不怎麼深,還是用比較明確的list吧 !


2014年12月18日 星期四

[jqGrid] jqGrid 屬性


jqgrid 屬性http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options

一、jqGrid 屬性:

1、datatype:
     local 本地
     json json數據格式
     jsonstring
     xml
     xmlstring
     javascript
     function
     clientSide

2、width,height:列表寬度/高度
     
3、colNames(字符串數組,如:['AA','BB']):

4:colModel 列模式
     {name:'', index:'', width:50, sorttype:'int',align:'right', sortable:false}
     name:列名
     sorttype:排序類型 如:int、float、date等
     align 對齊方式: left、right。
     sortable 是否可排序:true 、false

5、multiselect 是否可多選 true、false

6、caption 列表標題

7、url 數據請求連接

8、rowNum 顯示行數

9、rowList 列表顯示行數選擇列表

10、viewrecords: true,false 是否顯示記錄總數

11、onSelectRow:選中列表記錄操作
     onSelectRow:function(ids) {
     
     }

12、direction 列表文字的排序方向


二、jqgrid 方法:
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods

######################## 說明:########################
<table id="list"></table>
<div id="pager"></div>
########################################################


#################### 讀取列表屬性或值 ################
1、獲取選中記錄的行號:
     var row = jQuery("#list").jqGrid('getGridParam','selrow');

2、根據行號返回選中行的數據
     var rowData = jQuery("#list").jqGrid('getRowData', row);
     rowData.***     讀取選中記錄的屬性值“***”未行屬性,如rowData.id,返回行屬性id的值

3、根據行號刪除列表數據
     var su=jQuery("#list").jqGrid('delRowData', 12);     //刪除行號未12的記錄

4、新增記錄
     var datarow = {id:"99",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"};
     var su=jQuery("#list").jqGrid('addRowData', 99, datarow);     //99未知含義

5、讀取列表請求數據的url
     jQuery('#list').jqGrid('getGridParam', 'url'))

6、返回列表的默認排序列
     jQuery('#list').jqGrid('getGridParam', 'sortname')

7、返回列表默認的排序方式
     jQuery('#list')jqGrid('getGridParam', 'sortorder')

8、返回列表選中記錄
     jQuery('#list')jqGrid('getGridParam','selrow')

9、返回列表當前頁序號:
     jQuery('#list')jqGrid('getGridParam','page'))

10、返回列表選中記錄數
     jQuery('#list').jqGrid('getGridParam','rowNum')

11、返回選中記錄數據類型:
     jQuery('#list').jqGrid('getGridParam','datatype')

12、返回列表的記錄數:
     jQuery('#list').jqGrid('getGridParam','records')

#################### 設置列表屬性或值 ################
說明:讀取相應的改为set**就能夠設置列表屬性或值.

13、選中某一行記錄
     jQuery("#list2").jqGrid('setSelection',"1");     //選中該列表第一行數據



三、ColModel API
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options





建立新的javaweb工程,添加json相關的 jar包。

附上代碼,共以後查考。



Servlet生產json數據格式:
/**
*
*/
package org.rico.demo.jqgrid.demo.dataload;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
* @author rico
* jqgrid 初始列表數據-json數據格式
*/
public class DataLoadByJSon extends HttpServlet {
     private static final long serialVersionUID = 5546844758953964549L;

     /**
      * 說明:網上借來的數據
      * 鏈接:http://www.cnblogs.com/jancyxue/archive/2011/08/17/2141676.html
      *
      *
     * jqGrid默認期望返回的json對象格式要求如下:
     * {"page":"1","total":"2","records":"13",
     * "rows":[
     *                 {id:"1",cell:["1","jancyxue","男","jancyxue@163.com","410958040","江西餘幹"]},
     *                 {id:"2",cell:["2","linda","女","linda@163.com","111111111","湖南"]},
     *                 {id:"3",cell:["3","jason","男","jason@sina.com","222222222","湖北"]},
     *                 {id:"4",cell:["4","lucy","女","lucy@sina.com","33333333","北京"]}
     *        ]
     * }
     * 當然,在js中,可以通過jqGrid的jsonReader屬性來修改默認格式
     * 我們可以在jsonReader中定義repeatitems : false。這样,可以使用下面的數據格式(为了防止出錯,我們在寫colModel的時候如果實在不會就對應着下面的每個字段寫,就不容易出錯了:
     * "rows":[
     *                 {id:"1",engName:"jancyxue",gender:" 男",email:"jancyxue@163.com",QQ:"410958040",address:"江西餘幹"]},
     *                 {id:"2",engName:"linda",gender:" 女",email:"linda@163.com",QQ:"111111111","address:湖南"]},
     *                 {id:"3",engName:"jason",gender:" 男",email:"jason@sina.com",QQ:"222222222",address:"湖北"]},
     *                 {id:"4",engName:"lucy",gender:" 女",email:"lucy@sina.com",QQ:"33333333",address:"北京"]}
     *        ]
     * 就像這样colModel:[{name:'id',index:'id',width:55},{name:'engName',index:'engName',width:100},{name:'gender',index:'gender',width:180, sortable:false},{name:'email',index:'email',width:180},
             {name:'QQ',index:'QQ',width:280},{name:'address',index:'address',width:280}]
     *
     */
     
     @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //模擬數據
          JSONObject jo = new JSONObject();
          Integer rows = Integer.valueOf(request.getParameter("rows"));
          Integer page = Integer.valueOf(request.getParameter("page"));
          System.out.println("####rows: " + rows + "####page: " + page);
         
          Integer totalSize = 100;
          jo.put("page", page);          //當前頁
         
          Integer totalPages = totalSize%rows==0?totalSize/rows:(totalSize/rows+1);
          jo.put("total", totalPages);          //總頁數
          jo.put("records", totalSize);     //總記錄數
         
          JSONArray ja = new JSONArray();
          JSONObject rowJO = null;
         
          int index = (page-1)*rows;
          int lastIndex = page*rows;
          if(lastIndex > 100) {
               lastIndex = 100;
          }
          for(int i=1+index; i<=lastIndex; i++) {
               rowJO = new JSONObject();
               rowJO.put("id", i + "");
               rowJO.put("name", "X" + i);
               rowJO.put("sex", "XX" + i);
               rowJO.put("phone", "XXX" + i);
               rowJO.put("email", "XXXX@126.com" + i);
               
               ja.add(rowJO);
          }
         
          jo.put("rows", ja);
          System.out.println(jo.toString());
         
          response.setCharacterEncoding("UTF-8");
          PrintWriter pw = response.getWriter();
          pw.write(jo.toString());
          pw.flush();
          pw.close();
     }

     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doGet(request, response);
     }
}



/**
*
*/
package org.rico.demo.jqgrid.demo.dataload;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author rico
* 導航到jqgrid載入數據頁面
*/
public class DataLoadIndexServlet extends HttpServlet {
     private static final long serialVersionUID = 7226355428393263783L;

     @Override
     public void doGet(HttpServletRequest req, HttpServletResponse resp)
               throws ServletException, IOException {
          System.out.println("導航到jqgrid載入數據頁面");
          req.getRequestDispatcher("/jqgrid/dataLoad/dataload_json.jsp").forward(req, resp);
     }

     @Override
     public void doPost(HttpServletRequest req, HttpServletResponse resp)
               throws ServletException, IOException {
          this.doGet(req, resp);
     }

}



<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jqgrid 載入數據</title>
<link rel="stylesheet" type="text/css" media="screen" href="${pageContext.request.contextPath}/commons/css/jquery-ui-1.8.20.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="${pageContext.request.contextPath}/commons/css/ui.jqgrid.css" />

<script type="text/javascript" src="${pageContext.request.contextPath}/commons/js/jquery-1.9.0.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/commons/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/commons/js/i18n/grid.locale-cn.js"></script>
<style type="text/css">
ul li {
     float: left; margin-left: 15px;
     font-size: 8pt;
}
</style>
</head>
<body>
     <div style="height: 50px;">
          <ul>
               <li><a href="###" onclick="getSelectedRowData();">讀取選中記錄</a></li>
               <li><a href="###" onclick="deleteRow();">刪除選中行</a></li>
               <li><a href="###" onclick="updateRow();">更新第一行數據</a></li>
               <li><a href="###" onclick="addRow();">新增數據</a></li>
               <li><a href="###" onclick="getSeletedRowIds();">獲取選中記錄的id</a></li>
               <li><a href="###" onclick="setSelectedRow();">選中第一行記錄</a></li>
          </ul>
     </div>
     <table id="list2"></table>
     <div id="pager2"></div>
</body>

<script type="text/javascript">
jQuery("#list2").jqGrid({
        url:'${pageContext.request.contextPath}/dataLoadByJSon',
     datatype: "json",
    colNames:['id','name', 'sex', 'phone','email'],
        colModel:[
             {name:'id',index:'id', width:55},
             {name:'name',index:'name', width:100},
             {name:'sex',index:'sex', width:80, align:"right"},
             {name:'phone',index:'phone', width:80, align:"right"},          
             {name:'email',index:'email', width:80,align:"right"}          
        ],
        jsonReader:{
        page:"page",
        total:"total",
        repeatitems:false
    },
    pager:jQuery('#pager1'),
        rowNum:10,
        rowList:[10,20,30],
        pager: '#pager2',
        sortname: 'id',
    viewrecords: true,     //是否顯示記錄總數
    sortorder: "desc",
    width:900,
    height:'400',
    //recordpos: 'left',
    multiselect: true,
    caption:"JSON Example"
});
jQuery("#list2").jqGrid('navGrid','#pager2',{edit:false, add:false, del:false});


/**獲取選中記錄數據*/
function getSelectedRowData() {
     var row = jQuery("#list2").jqGrid('getGridParam','selrow');
     if(row) {
          var selectedRow = jQuery("#list2").jqGrid('getRowData',row);
          alert("###id="+selectedRow.id+" ###name="+selectedRow.name+"...");
     } else {
          alert("未選取任何記錄.");
     }
}

/**刪除選中行*/
function deleteRow() {
     var row = jQuery("#list2").jqGrid('getGridParam','selrow');
     if(!row || row=='') {
          alert("未選取任何記錄.");return;
     }
     
     var delRow = jQuery("#list2").jqGrid('delRowData', row);
     if(delRow)
           alert("未實現相關的刪除操作 .");
}

/**更新第一行數據*/
function updateRow() {
     var rowData = jQuery("#list2").jqGrid('setRowData', 1, {id:"X!", name:"ricoXX", sex:"manXX"});
     if(rowData)
          alert("更新第一行數據成功.");
}

/**新增數據*/
function addRow() {
     var datarow = {id:"101",name:"rio",sex:"man",phone:"199876****",email:"XXX.126.com"};
     var su=jQuery("#list2").jqGrid('addRowData', 101, datarow);
     if(su)
          alert("新增數據成功。");
     else
          alert("新增數據發生錯誤。");
}

/**獲取選中記錄的id*/
function getSeletedRowIds() {
     var ids = jQuery("#list2").jqGrid('getGridParam', 'selarrrow');
     alert(ids);
}

/**選中第一行記錄*/
function setSelectedRow() {
     jQuery("#list2").jqGrid('setSelection',"1");
}

</script>
</html>


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
     <display-name>jqgridDemo</display-name>
     <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
     </welcome-file-list>
     
     
     <!-- 導航到jqgrid載入數據頁面-->
     <servlet>
          <servlet-name>DataLoadIndexServlet</servlet-name>
          <servlet-class>org.rico.demo.jqgrid.demo.dataload.DataLoadIndexServlet</servlet-class>
     </servlet>
     
     <servlet-mapping>
          <servlet-name>DataLoadIndexServlet</servlet-name>
          <url-pattern>/dataLoadIndexServlet</url-pattern>
     </servlet-mapping>
     
     <!-- jqgrid載入數據-json格式 -->
     <servlet>
          <servlet-name>DataLoadByJSon</servlet-name>
          <servlet-class>org.rico.demo.jqgrid.demo.dataload.DataLoadByJSon</servlet-class>
     </servlet>
     
     <servlet-mapping>
          <servlet-name>DataLoadByJSon</servlet-name>
          <url-pattern>/dataLoadByJSon</url-pattern>
     </servlet-mapping>
     
</web-app>


2014年11月21日 星期五

[C#] Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.


form: http://ianworkshop.blogspot.tw/2014/01/validation-failed-for-one-or-more.html


可能某個不可為null的欄位, 填入了null, 但是不知道是哪個欄位, 因此使用try catch來捕抓錯誤

            try
            {
                _db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}"validationError.PropertyNamevalidationError.ErrorMessage);
                    }
                }
            }

[C#] Nullable 說明

form: http://www.dotblogs.com.tw/dotjum/archive/2008/08/02/4756.aspx



Nullable 是 .NET 2.0 所新增的類別,

主要可以用來針對 實值型別 (參考一) 給予 Null 當初始值 及 檢查是否為 null ,

這邊先瞭解關於常見 實值型別  型別有哪些,而 DateTime 在.NET Framework 實值型別(參考二)

而之前自己的經驗,在對 inet , Datetime 做處理是 null 的時候,

以 DateTime 來說會使用 DateTime.MinValue 的方式,來代表一個 Null 的值,

也聽別人的經驗說,就大家說好一個某一個日期就是null的值(但這樣非常不好,請大家不要這樣)

而使用Nullable就能方便處理實值型別初始值 的問題

Nullable 的使用也很簡單

Nullable<型別> 變數名 = null ;或   型別? 變數 = null;




2014年10月7日 星期二

[C#] 列凍結 Frozen


        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable table = GetTable();
            dataGridView1.DataSource = table;

            dataGridView1.Columns[0].Frozen = true;

        }

        /// <summary>
        /// This example method generates a DataTable.
        /// </summary>
        private DataTable GetTable()
        {
            // Here we create a DataTable with four columns.
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));

            for (int i = 0; i < 50; i++)
             {
                // Here we add five DataRows.
                table.Rows.Add(25 + i, "Indocin", "David", DateTime.Now);
                table.Rows.Add(50 + i, "Enebrel", "Sam", DateTime.Now);
                table.Rows.Add(10 + i, "Hydralazine", "Christoff", DateTime.Now);
                table.Rows.Add(21 + i, "Combivent", "Janet", DateTime.Now);
                table.Rows.Add(100 + i, "Dilantin", "Melanie", DateTime.Now);
            }

            return table;
        }





---------------------------






1) 列冻结
DataGridViewColumn.Frozen 属性为 true 时, 该列左侧的所有列被固定, 横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。
示例代码1:
dataGridView1.Columns[0].Frozen = true;  //只锁定第1列
dataGridView1.AllowUserToOrderColumns = true; //更改栏位顺序
注意:
DataGridView.AllowUserToOrderColumns = True 时,固定列不能移动到非固定列, 反之亦然。
示例代码2:
DataGridView1.Columns[1].Frozen = true; // 锁定第1列和第2列
2) 行冻结
DataGridViewRow.Frozen 属性为 True 时, 该行上面的所有行被固定, 纵向滚动时固定行不随滚动条滚动而上下移动。
// DataGridView1 的上2行固定DataGridView1.Rows[2].Frozen = true;

http://www.phpbegin.com/2013/04/30/295.html





2014年9月30日 星期二

[Javascript]三個好用的Height,Width屬性





<script type="text/javascript">

//整個螢幕解析度
document.write("window.screen.height:" + window.screen.height + "<br/>");
document.write("window.screen.width:" + window.screen.width + "<br/>");

//扣掉視窗下面那個工作列
document.write("window.screen.availHeight:" + window.screen.availHeight + "<br/>");
document.write("window.screen.availWidth:" + window.screen.availWidth + "<br/>");

//扣掉視窗下面那個工作列 與瀏覽器工具列和邊框
document.write("document.documentElement.clientHeight:" + document.documentElement.clientHeight + "<br/>");
document.write("document.documentElement.clientWidth:" + document.documentElement.clientWidth + "<br/>");

</script>



From: http://www.dotblogs.com.tw/puma/archive/2009/04/02/javascript-width-height-clientwidth-availwidth-screen.aspx

 

MangoHost Copyright © 2009 Cookiez is Designed by Ipietoon for Free Blogger Template