webbrowser1 脚本报错_webbrowser脚本错误的解决办法

当在Winform中使用webbrowser控件的时候,一加载网页,就出现各种各样的JS脚本错误提示。

本人是使用如下两种方法解决的,具体是哪种解决问题,俺也不知道。

方法一:

public Form1()

{

InitializeComponent();

this.webBrowser1.ScriptErrorsSuppressed = true;

this.webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;

}

private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

//## 设置文档窗口错误的处理。

this.webBrowser1.Document.Window.Error += OnWebBrowserDocumentWindowError;

}

private void OnWebBrowserDocumentWindowError(object sender, HtmlElementErrorEventArgs e)

{

e.Handled = true;

}

private void Form1_Load(object sender, EventArgs e)

{

this.webBrowser1.Url = new Uri("http://www.xxx.com");//指定url地址为百度首页 

}

二、方法二

强制webbrowser控件使用相应的IE内核

private enum IeVersion

{

强制ie10,//10001 (0x2711) Internet Explorer 10。网页以IE 10的标准模式展现,页面!DOCTYPE无效

标准ie10,//10000 (0x02710) Internet Explorer 10。在IE 10标准模式中按照网页上!DOCTYPE指令来显示网页。Internet Explorer 10 默认值。

强制ie9,//9999 (0x270F) Windows Internet Explorer 9. 强制IE9显示,忽略!DOCTYPE指令

标准ie9,//9000 (0x2328) Internet Explorer 9. Internet Explorer 9默认值,在IE9标准模式中按照网页上!DOCTYPE指令来显示网页。

强制ie8,//8888 (0x22B8) Internet Explorer 8,强制IE8标准模式显示,忽略!DOCTYPE指令

标准ie8,//8000 (0x1F40) Internet Explorer 8默认设置,在IE8标准模式中按照网页上!DOCTYPE指令展示网页

标准ie7//7000 (0x1B58) 使用WebBrowser Control控件的应用程序所使用的默认值,在IE7标准模式中按照网页上!DOCTYPE指令来展示网页

}

///

/// 设置WebBrowser的默认版本

///

/// IE版本

private void SetIE(IeVersion ver)

{

string productName = AppDomain.CurrentDomain.SetupInformation.ApplicationName;//获取程序名称

object version;

switch (ver)

{

case IeVersion.标准ie7:

version = 0x1B58;

break;

case IeVersion.标准ie8:

version = 0x1F40;

break;

case IeVersion.强制ie8:

version = 0x22B8;

break;

case IeVersion.标准ie9:

version = 0x2328;

break;

case IeVersion.强制ie9:

version = 0x270F;

break;

case IeVersion.标准ie10:

version = 0x02710;

break;

case IeVersion.强制ie10:

version = 0x2711;

break;

default:

version = 0x1F40;

break;

}

RegistryKey key = Registry.CurrentUser;

RegistryKey software =key.CreateSubKey( @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\" + productName);

if (software != null)

{

software.Close();

software.Dispose();

}

RegistryKey wwui = key.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);

//该项必须已存在

if (wwui != null) wwui.SetValue(productName, version, RegistryValueKind.DWord);

}

上述的代码,调用方法为:SetIE(IeVersion.强制ie9);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Delphi 中使用 WebBrowser 控件进行跨域访问,可以使用以下方法: 1. 设置 WebBrowser 的安全选项 在 WebBrowser 控件加载网页前,可以通过设置其安全选项来允许跨域访问。具体方法如下: ```delphi var vEmpty: OleVariant; begin vEmpty := EmptyParam; WebBrowser1.Silent := True; // 静默模式 WebBrowser1.Navigate('about:blank', vEmpty, vEmpty, vEmpty, vEmpty); // 加载空页面 while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do // 等待加载完成 Application.ProcessMessages; (WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript( 'document.domain = "example.com";', 'JavaScript'); // 设置跨域域名 end; ``` 上述代码中,`WebBrowser1.Silent` 属性设置为 True,表示在加载网页时不显示任何消息框。接着,通过调用 `Navigate` 方法加载一个空页面,并通过 `while` 循环等待 WebBrowser 控件的 `ReadyState` 属性达到 `READYSTATE_INTERACTIVE` 状态,即网页已经加载完成。最后,通过调用 `execScript` 方法执行 JavaScript 脚本来设置跨域域名。 2. 使用 IInternetSecurityManager 接口 另一种方法是通过使用 Delphi 提供的 `IInternetSecurityManager` 接口来实现跨域访问。具体方法如下: ```delphi uses UrlMon; var vEmpty: OleVariant; pSecMgr: IInternetSecurityManager; begin vEmpty := EmptyParam; WebBrowser1.Silent := True; // 静默模式 CoInternetCreateSecurityManager(nil, pSecMgr, 0); // 创建安全管理器 pSecMgr.SetSecuritySite(nil); // 设置安全站点 pSecMgr.ProcessUrlAction('http://example.com', URLACTION_SCRIPT_RUN, nil, 0, nil, 0, PUAF_NOUI, 0); // 设置跨域域名 WebBrowser1.Navigate('http://example.com', vEmpty, vEmpty, vEmpty, vEmpty); // 加载目标页面 end; ``` 上述代码中,首先通过调用 `CoInternetCreateSecurityManager` 函数创建一个安全管理器,然后通过调用 `SetSecuritySite` 方法设置安全站点。接着,调用 `ProcessUrlAction` 方法设置跨域域名。最后,通过调用 `Navigate` 方法加载目标页面。 以上两种方法都可以实现 Delphi WebBrowser 控件的跨域访问。具体使用哪种方法,可以根据实际情况选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值