关于JavaScript中判断终端类型的说明

一、定义浏览器终端类型对象:

// 定义终端浏览器对象
(function (window, undefined) {
    // 获取userAgent对象
    var u = navigator.userAgent;
    // 获取终端浏览器对象
    var browser = window.browser || {};
    // 获取终端浏览器版本信息
    var versions = browser.versions || {
        // IE内核
        trident: u.indexOf("Trident") > -1,
        // Opera内核
        presto: u.indexOf("Presto") > -1,
        // 苹果、谷歌内核
        webKit: u.indexOf("AppleWebKit") > -1,
        // 火狐内核
        gecko: u.indexOf("Gecko") > -1 && u.indexOf("KHTML") == -1,
        // 是否为移动终端
        mobile: !!u.match(/AppleWebKit.*Mobile.*/),
        // IOS终端
        ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
        // Android终端或者UC浏览器
        android: u.indexOf("Android") > -1 || u.indexOf("Linux") > -1,
        // 是否为iPhone或者QQHD浏览器
        iPhone: u.indexOf("iPhone") > -1,
        // 是否iPad
        iPad: u.indexOf("iPad") > -1,
        // 是否Web应该程序,没有头部与底部
        webApp: u.indexOf("Safari") == -1,
        // 语言
        language: (u.browserLanguage || u.language).toLowerCase()
    };
    // 重新赋值终端浏览器版本信息
    browser.versions = versions;
    // 重新赋值终端浏览器对象
    window.browser = browser;
})(window);

可以通过以上定义的browser.versions对象判断是否为对应的终端。

二、判断是否为移动终端:

return browser.versions.mobile || browser.versions.ios || browser.versions.android || browser.versions.iPhone || browser.versions.iPad;

关于Oracle中解锁账户的说明

出于安全性考虑,在Oracle中当我们多次误操作(比如多次输入错误的密码)时,我们的账户可能会被Oracle系统锁定:the account is locked
在这种情况下,我们可以通过使用其他sysdba账户(如sys)登入到Oracle服务器,并执行以下SQL命令来重新解锁账户:

alter user [username] account unlock;

关于JavaScript中Date对象字符串格式化的说明

一、定义Date对象字符串格式化方法:

// 定义全局的Date对象字符串格式化方法
(function (window, undefined) {
    // 判断Date对象字符串格式化方法是否已经定义
    if (typeof (window.dateFormat) == "function") {
        return;
    }
    /**
    * date:需要格式化的Date对象
    * format:格式化规则
    * return:Date对象格式化后的字符串
    */
    window.dateFormat = function (date, format) {
        var o = {
            "M+": date.getMonth() + 1,
            "d+": date.getDate(),
            "H+": date.getHours(),
            "m+": date.getMinutes(),
            "s+": date.getSeconds(),
            "q+": Math.floor((date.getMonth() + 3) / 3),
            "S": date.getMilliseconds()
        };
        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(format)) {
                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
            }
        }
        return format;
    };
})(window);

二、可以同时将字符串格式化方法绑定到Date的原型上:

// 绑定字符串格式化方法到Date的原型上
Date.prototype.format = function (format) {
    return dateFormat(this, format);
};

这样的好处是可以直接通过调用Date实例对象的format方法来达到字符串格式化的效果。

三、参数说明:
date:需要格式化的Date实例对象,当使用原型方法时,直接传递Date的实例对象。

format:格式化规则,取值为字符“y(年)”、“M(月)”、“d(日)”、“H(时)”、“m(分)”、“s(秒)”、“q(季度)”、“S(毫秒)”和其他需要直接显示的字符的组合。其中字符“y”、“M”、“d”、“H”、“m”、“s”、“q”可迭代出现,并且除“y”字符最多可迭代4位外,其他字符最多可迭代2位。当“y”迭代出现时格式化为年份的精度,即“yyyy”表示4位年份,“yy”则表示两位年份;当其他字符迭代出现并且格式化后的字符数未达到迭代数时,将会在格式化后的字符串前面补上缺少位数的“0”字符,如1月采用“M”规则时格式化为“1”,而采用“MM”规则时则格式化为“01”。字符“S”无迭代,单一出现,代表3位毫秒数。

四、调用示例:

// 创建Date对象
var date = new Date();
// 调用全局方法
var format1 = dateFormat(date, "yyyy-MMM-dd"); // 结果:2016-01-11
var format2 = dateFormat(date, "yy-M-d H:m:s.S"); // 结果:16-1-11 8:9:59.456
// 调用原型方法
var format3 = date.format("yyyy/MM/dd HH:mm:ss"); // 结果:2016/01/11 08:09:59
var format4 = date.format("yyyy年q季度"); // 结果:2016年1季度

关于64位IIS中启用32位或64位应用程序的说明

64位的IIS中默认启用的是64位应用程序模式。
在IIS7及以上版本里我们可以通过应用程序池里各个应用程序的高级设置来管理应用程序运行的.NET Framework版本、是否启用32位应用程序和托管管道模式等设置:
iis-32bit-64bit-mode-1

但是在IIS6及以下版本里还没有这样的高级设置功能,因此我们只能通过IIS服务自带的基于命令行下的IIS管理脚本Adsutil.vbs来进行设置:

一、开启32位应用程序模式:

cscript %systemdrive%/inetpub/adminscripts/adsutil.vbs set w3svc/appPools/enable32bitapponwin64 1

二、关闭32位应用程序模式(启用默认的64位模式):

cscript %systemdrive%/inetpub/adminscripts/adsutil.vbs set w3svc/appPools/enable32bitapponwin64 0

三、注册32位ASP.NET版本:

C:/WINDOWS/Microsoft.NET/Framework/{version}/aspnet_regiis -i

其中{version}为ASP.NET版本目录,如:

C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis -i
C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/aspnet_regiis -i

四、注册64位ASP.NET版本:

C:/WINDOWS/Microsoft.NET/Framework64/{version}/aspnet_regiis -i

其中{version}为ASP.NET版本目录,如:

C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727/aspnet_regiis -i
C:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319/aspnet_regiis -i

五、在Web服务扩展里允许或禁用对应的ASP.NET扩展:
iis-32bit-64bit-mode-2

更多信息请参阅:Using the Adsutil.vbs Administration Script (IIS 6.0)

关于JavaScript中判断滚动条到底部的说明

判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop(滚动条在Y轴上的滚动距离)、clientHeight(内容可视区域的高度)、scrollHeight(容可视区域的高度加上溢出滚动的距离)。从这个三个属性可以看出来,滚动条到底部的条件即为:

scrollTop + clientHeight == scrollHeight

一、使用标准DOM方法:

// 定义滚动条判断方法
(function (window, undefined) {
    if (typeof (window.getScrollTop) != "function") {
        // 获取滚动条在Y轴上的滚动距离  
        window.getScrollTop = function () {
            var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
            if (document.body) {
                bodyScrollTop = document.body.scrollTop;
            }
            if (document.documentElement) {
                documentScrollTop = document.documentElement.scrollTop;
            }
            scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
            return scrollTop;
        };
    }
    if (typeof (window.getScrollHeight) != "function") {
        // 获取文档的总高度 
        window.getScrollHeight = function () {
            var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
            if (document.body) {
                bodyScrollHeight = document.body.scrollHeight;
            }
            if (document.documentElement) {
                documentScrollHeight = document.documentElement.scrollHeight;
            }
            scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
            return scrollHeight;
        };
    }
    if (typeof (window.getWindowHeight) != "function") {
        // 获取浏览器视口的高度 
        window.getWindowHeight = function () {
            var windowHeight = 0;
            if (document.compatMode == "CSS1Compat") {
                windowHeight = document.documentElement.clientHeight;
            } else {
                windowHeight = document.body.clientHeight;
            }
            return windowHeight;
        };
    }
})(window);

// 添加滚动事件
window.onscroll = function () {
    // 判断是否滚动条是否在底部
    if (getScrollTop() + getWindowHeight() == getScrollHeight()) {
        alert("滚动条在底部");
    }
};

二、使用jQuery框架方法:

// 定义jQuery对象
var $window = jQuery(window);
var $document = jQuery(document);
// 添加滚动事件
$window.scroll(function () {
    // 获取滚动条在Y轴上的滚动距离
    var scrollTop = $window.scrollTop();
    // 获取文档的总高度 
    var scrollHeight = $document.height();
    // 获取浏览器视口的高度 
    var windowHeight = $window.height();
    // 判断是否滚动条是否在底部
    if (scrollTop + windowHeight == scrollHeight) {
        alert("滚动条在底部");
    }
});