最近使用C# WebBrowser开发了一个客户端用来做图形展示,由于项目中引用了中央气象台天气信息的网页,出现了脚本加载不了的问题,费了九牛二虎之力才找出解决方法:添加信任站点。参考网上资料写了一个工具类,现把代码贴出来以供参考。
在IE 工具栏->Internet选项->安全->可信站点->站点 里做添加/删除操作实际上是在操作注册表HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap路径下Domains和Ranges两个节点,如果是普通url,如:http://flash.weather.com.cn,生成的节点如下:
如果是普通IP地址,如:http://10.120.1.1,生成的节点如下:
针对这两种信任站点的不同操作方式需要分别进行处理,代码如下:
using Microsoft.Win32;
/// <summary>
/// 添加/删除 信任站点
/// </summary>
public class OperateTrustSite {
//在注册表添加信任站点
public static void addTrustSite(string url)
{
RegistryKey currentUser = Registry.CurrentUser;//HKEY_CURRENT_USER
string[] parts = url.Split(new char[] { '/' });//将URL拆分,提取协议和url地址
string protocol = parts[0].Substring(0, parts[0].Length - 1);//采用的协议:http/https
///////////判断是普通URL还是IP,普通URL在Domains节点下操作,IP在Ranges节点下操作////////////////
if (isIP(parts[2]))
{
string domainsKeyLocation = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges";
RegistryKey ranges = currentUser.OpenSubKey(domainsKeyLocation, true);
bool has = false;//标识IP是否已经添加
List<string> numbers = new List<string>();//用来存放Range编号
//循环所有的range节点,如果要添加的IP已经存在则不操作,否则添加
foreach (string u in ranges.GetSubKeyNames())
{
numbers.Add(u.Substring("Range".Length));//截取Range1后面的数字1
RegistryKey range = ranges.OpenSubKey(u, true);//以可写的权限打开子节点
//如果该IP地址已经存在
&