0

我有一个 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);
    } 
}
4

1 回答 1

0

我不会说我立即知道确切的答案。但我会说你通常应该通过接口而不是类来初始化 Internet Explorer。当我尝试直接初始化类时遇到了错误。

尝试这个 :

  SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
  IE.Visible = true;
于 2016-12-11T23:06:16.673 回答