我有一个 C# 项目,它使用Interop.SHDocVw在 IE 浏览器中打开 url 。
该代码使用 InternetExplorerClass 对象的单个实例并导航到不同的 url。这些 url 都在Intranet区域中。
该代码在WIN7上运行良好,但在WIN10上出现问题。IE 浏览器第一次正确打开 url,但是当我第二次尝试使用 navigate 或 navigate2 方法使用它时,出现以下错误:
System.Runtime.InteropServices.COMException (0x80004004): SHDocVw.InternetExplorerClass.Navigate (String URL, Object& Flags, Object& TargetFrameName, Object& PostData, Object& Headers) 处的操作中止(HRESULT 异常:0x80004004 (E_ABORT))
我尝试“以管理员身份”运行主机应用程序,然后它运行良好。此外,当我在 IE 窗口中手动导航到Internet区域中的 url 时,没有问题,但是当手动导航到不同的Intranet url 并尝试第二次运行代码时,再次抛出错误。
代码:
公共静态无效 IEOpenOnURL(字符串 url){ 对象 o = null; 布尔新浏览器=假;
//check if window is already opened
if(webBrowser==null)
{
newBrowser = true;
}
else
{
try
{
//Cannot navigate in browser with an open modal dialog
if(webBrowser.Busy)
{
MessageBox.Show("הדפדפן תפוס - סגור את החלונות הקופצים מתוך הדפדפן הפתוח");
return;
}
}
//an error is thrown when the browser was closed by user
catch(Exception)
{
newBrowser = true;
}
}
if(newBrowser)
{
//create new instance of the browser
InternetExplorer explorer = new InternetExplorerClass();
webBrowser = (IWebBrowser2)explorer;
}
webBrowser.Visible = true;
//webBrowser.Navigate(url, ref o, ref o, ref o, ref o);
webBrowser.Navigate2(url, ref o, ref o, ref o, ref o);
//Set focus
SetForegroundWindow((IntPtr)webBrowser.HWND);
//If browser is minimized - show it
ShowWindow((IntPtr)webBrowser.HWND,9);
}
}