关于JavaScript中动态加载link标签的说明

在编写网页时,样式文件的引入常常需要使用link标签,该标签除了可以在head标签内直接添加外,还可以在网页运行过程中通过JavaScript动态加载:

// 定义样式文件加载完成回调方法
var callback = function () {
    alert("样式文件加载完成");
};
// 定义要加载的样式文件地址
var url = "style.css";
// 创建link标签
var link = document.createElement("link");
// 设置link标签属性
link.rel = "stylesheet";
link.type = "text/css";
link.media = "screen";
link.href = url;
// 将link标签添加到head标签内
document.getElementsByTagName("head")[0].appendChild(link);
// 触发自定义的样式文件加载完成回调方法
if (typeof (callback) == "function") {
    callback.apply(link);
}

关于JavaScript中动态加载script标签的说明

在使用JavaScript开发时,有时除了需要在head标签内直接引入script标签外,还会需要根据代码逻辑的执行状态去动态引入script脚本,并且我们也可能希望在脚本文件加载完成后触发我们需要运行的function。
我们可以通过以下两种方法实现:

一、使用标准DOM方法:

// 定义脚本加载完成回调方法
var callback = function () {
    alert("脚本加载完成");
};
// 定义要加载的脚本地址
var url = "script.js";
// 定义判断脚本是否加载完成的标识
var done = false;
// 创建script标签
var script = document.createElement("script");
// 设置script标签属性
script.type = "text/javascript";
script.language = "javascript";
script.src = url;
// 绑定脚本加载完成事件
script.onload = script.onreadystatechange = function () {
    // 判断脚本是否加载完成并且事件未触发过
    if (!done && (!script.readyState || script.readyState == "loaded" || script.readyState == "complete")) {
        // 标识脚本事件已触发过一次
        done = true;
        // 移除脚本加载完成事件
        script.onload = script.onreadystatechange = null;
        // 触发自定义的脚本加载完成回调方法
        if (typeof (callback) == "function") {
            callback.apply(script);
        }
    }
};
// 将script标签添加到head标签内
document.getElementsByTagName("head")[0].appendChild(script);

二、使用jQuery框架方法:

// 定义脚本加载完成回调方法
var callback = function () {
    alert("脚本加载完成");
};
// 定义要加载的脚本地址
var url = "script.js";
// 使用jQuery的ajax方法加载script脚本
jQuery.ajax({
    url: url,
    type: "GET",
    dataType: "script",
    success: function () {
        // 触发自定义的脚本加载完成回调方法
        if (typeof (callback) == "function") {
            callback.apply(this, arguments);
        }
    }
});

关于C#中换算像素和毫米的说明

在C#中是以像素作为尺寸单位的,像素是一种相对的尺寸概念,与毫米的转换跟当前显示器的分辨率有关,在不同分辨率下转换的系数也不同。
借助C#中的GDI可以实现像素与毫米的换算:

一、根据Win32 API定义函数获取显示器设备信息:

/// <summary>
/// 获取设备信息
/// </summary>
/// <param name="hdc">要查询设备的句柄</param>
/// <param name="index">设备信息所在的索引值</param>
/// <returns>返回对应索引值上的设备信息</returns>
[DllImport("gdi32.dll")]
private static extern int GetDeviceCaps(IntPtr hdc, int index);

二、根据显示器设备信息计算像素与毫米的换算比率:

// 定义获取Graphics对象所需的控件
Panel panel = new Panel();
// 根据控件所在句柄获取Graphics对象
Graphics graphics = Graphics.FromHwnd(panel.Handle);
// 获取设备句柄
IntPtr hdc = graphics.GetHdc();
// 获取屏幕宽度(毫米)HORZSIZE
int width = GetDeviceCaps(hdc, 4);
// 获取屏幕高度(毫米)VERTSIZE
int height = GetDeviceCaps(hdc, 6);
// 获取屏幕宽度(像素)HORZRES
int xPixels = GetDeviceCaps(hdc, 8);
// 获取屏幕高度(像素)VERTRES
int yPixels = GetDeviceCaps(hdc, 10);
// 释放设备句柄
graphics.ReleaseHdc(hdc);
// 释放Graphics对象
graphics.Dispose();
// 计算X轴方向像素与毫米的比率
double xRate = (double)xPixels / (double)width;
// 计算Y轴方向像素与毫米的比率
double yRate = (double)yPixels / (double)height;

三、像素数换算为毫米数:

// 定义要换算的毫米数
double millimeter = 10;
// 计算X轴方向像素数
int xPixel = (int)Math.Round(xRate * millimeter);
// 计算Y轴方向像素数
int yPixel = (int)Math.Round(yRate * millimeter);

四、毫米数换算为像素数:

// 定义要换算的像素数
int pixel = 10;
// 计算X轴方向毫米数
double xMillimeter = pixel / xRate;
// 计算Y轴方向毫米数
double yMillimeter = pixel / yRate;

更多信息请参阅:GetDeviceCaps function (Windows)

关于MySQL中设置允许远程访问的说明

数据库MySQL在默认情况下是不允许远程访问并登录的,如果需要允许远程访问有以下两种解决方法:

一、修改系统表数据方法:
在MySQL本机使用管理员账号登录,更改“mysql”数据库中的“user”表里的“host”项值,将值“localhost”改为“%”:

use mysql;
update user set host = '%' where user = 'root';

二、授权方法:
在MySQL本机使用管理员账号登录,执行以下SQL命令授权用户远程登录权限:

grant all privileges on *.* to 'root'@'%' with grant option; 

如果希望只有指定的IP使用密码才可以远程访问,可执行以下SQL命令:

grant all privileges on *.* to 'root'@'192.168.1.1' identified by '[password]' with grant option; 

关于PostgreSQL中设置允许远程访问的说明

数据库PostgreSQL在默认情况下是不允许远程访问并登录的,如果需要允许远程访问则需要修改两个配置文件:

一、postgresql.conf:
该文件位于PostgreSQL安装目录的data文件夹下,将该配置文件中的“listen_addresses”项值设置为“’*’”:

listen_addresses = '*'

二、pg_hba.conf:
该文件同样位于PostgreSQL安装目录的data文件夹下,在该配置文件的“host all all 127.0.0.1/32 md5”行下添加以下配置,或者直接将这一行修改为以下配置:

host all all 0.0.0.0/0 md5

如果希望只有指定的IP才可以远程访问,则可以将上述配置项中的“0.0.0.0”设定为特定的IP值。