C# WebBrowser无法跳转默认浏览器问题

使用场景

使用WebBrowser只是为了做内嵌页展示,内嵌页内容链接要跳转系统默认浏览器。

遇到问题

1.非ui主线程打开的WebBrowser加载的网页内容链接无法跳转
2.非链接标签无法跳转,如下button标签

<button class="container" onclick="clickTwo()">
function clickOne() {
  // 按钮1链接
  var link1 = 'https://xxx'
  clickEvent(link1, '按钮1')
}

解决办法

WebBrowser控件的内核为IE,默认为IE7,很多的网站不支持IE7,所以需要使用WebBrowser的话,对WebBrowser提升内核还是很有必要的。
下面通过修改注册表信息来兼容当前程序的方式可以解决第二个问题。

static class WebBrowserEx
{
   
	#region 浏览器设置
	/// <summary>  
	/// 修改注册表信息来兼容当前程序  
	/// </summary>  
	private static void SetWebBrowserFeatures(int ieVersion)
	{
   
		if (LicenseManager.UsageMode != LicenseUsageMode.Runtime)
			return;
		//获取程序及名称  
		var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
		//得到浏览器的模式的值  
		uint ieMode = GetEmulationMode(ieVersion);
		var featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\";
		//设置浏览器对应用程序(appName)以什么模式(ieMode)运行  
		Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION",
			appName, ieMode, RegistryValueKind.DWord);
		//不晓得设置有什么用  
		Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION",
			appName, 1, RegistryValueKind.DWord);
	}

	/// <summary>  
	/// 获取浏览器的版本  
	/// </summary>  
	/// <returns></returns>  
	public static int GetBrowserVersion()
	{
   
		int browserVersion = 0;
		using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
			RegistryKeyPermissionCheck.ReadSubTree,
			System.Security.AccessControl.RegistryRights.QueryValues))
		{
   
			var version = ieKey.GetValue("svcVersion");
			if (null == version)
			{
   
				version = ieKey.GetValue("Version");
				if (null == version)
					throw new ApplicationException("Microsoft Internet Explorer is required!");
			}
			int.TryParse(version.ToString().Split('.')[0], out browserVersion);
		}
		//如果小于7  
		if (browserVersion < 7)
		{
   
			throw new ApplicationException("不支持的浏览器版本!");
		}
		return browserVersion;
	}

	//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值