webbrowser1 ajax,C# WebBrowser Ajax call

WebBrowser control (both WPF and WinForms versions) behaves in many ways differently from the full IE. You may want to implement Feature Control to bring its behavior as close to IE as possible (particularly, FEATURE_BROWSER_EMULATION), this often solves the script compatibility issues. Here is some code, note that it does not require admin rights to run:

private void SetBrowserFeatureControlKey(string feature, string appName, uint value)

{

using (var key = Registry.CurrentUser.CreateSubKey(

String.Concat(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature),

RegistryKeyPermissionCheck.ReadWriteSubTree))

{

key.SetValue(appName, (UInt32)value, RegistryValueKind.DWord);

}

}

For example:

private void SetBrowserFeatureControl()

{

// http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx

// FeatureControl settings are per-process

var fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);

// make the control is not running inside Visual Studio Designer

if (String.Compare(fileName, "devenv.exe", true) == 0 || String.Compare(fileName, "XDesProc.exe", true) == 0)

return;

SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode()); // Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.

SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE ", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING ", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI ", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName, 1);

SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS ", fileName, 0);

SetBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName, 1);

}

private UInt32 GetBrowserEmulationMode()

{

int browserVersion = 7;

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);

}

UInt32 mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode. Default value for Internet Explorer 11.

switch (browserVersion)

{

case 7:

mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.

break;

case 8:

mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8

break;

case 9:

mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.

break;

case 10:

mode = 10000; // Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 mode. Default value for Internet Explorer 10.

break;

default:

// use IE11 mode by default

break;

}

return mode;

}

You should come up with your own set of features and register them before WebBrowser has initialized, e.g., in the main form constructor:

public MainWindow()

{

SetBrowserFeatureControl();

InitializeComponent();

//...

}

Updated, I currently use and recommend a set of features that can be found here.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值