Как правильно запустить WebBrowser - PullRequest
1 голос
/ 08 июля 2019

Я управляю надстройкой Excel в C #, используя VS2017.

Надстройка использует веб-браузер, который используется для доступа к определенным веб-страницам. Недавно он перестал работать на каждой версии надстройки, которую я имею (dev и release), хотя я не видел заметок об этом патче.

По сути, элемент управления WebBrowser больше не отображается. Все его свойства установлены правильно, HTML-документ корректно загружается при навигации, но вместо элемента управления ничего не отображается. Элемент управления и его родительский компонент установлены на видимое значение и правильно загружены с правильным размером и координатами.

Я установил новый пустой проект в Visual Studio и протестировал его только с помощью элемента управления WebBrowser, пытающегося отобразить Google и about: blank, но безуспешно. Вот код ниже:

ThisAddin.cs :

    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new MyRibbon();
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }

MyRibbon.cs :

    [ComVisible(true)]
    public class MyRibbon : Office.IRibbonExtensibility
    {
        private Office.IRibbonUI ribbon;

        public MyRibbon()
        {
        }

        #region IRibbonExtensibility Members

        public string GetCustomUI(string ribbonID)
        {
            return GetResourceText("WebBrowserShowcase.MyRibbon.xml");
        }

        #endregion

        #region Ribbon Callbacks
        //Create callback methods here. For more information about adding callback methods, visit https://go.microsoft.com/fwlink/?LinkID=271226

        public void Ribbon_Load(Office.IRibbonUI ribbonUI)
        {
            this.ribbon = ribbonUI;
        }

        public void openWebBrowser_click(IRibbonControl control)
        {
            WebPanel panel = new WebPanel();
            panel.ShowWebBrowser();
        }

        public string getTabLabel(IRibbonControl control) { return "WebBrowserShowCase"; }

        #endregion
    }

MyRibbon.xml :

<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <ribbon>
    <tabs>
      <tab id="myRibbon" getLabel="getTabLabel">
        <group id="MyGroup" label="My Group">
          <button id="OpenWebBrowser" size="large" onAction="openWebBrowser_click" imageMso="_3DDirectionGalleryClassic"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

WebPanel.cs :

    public class WebPanel : UserControl
    {
        TableLayoutPanel tableLayoutPanel1;
        WebBrowser _webBrowser;

        public WebPanel()
        {
            InitializeComponent();
            WebBrowserHelper.FixBrowserVersion();
        }

        public void ShowWebBrowser()
        {
            CustomTaskPane taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(this, "title", Globals.ThisAddIn.Application.ActiveWindow);
            DisplayTaskPane(taskPane);
            Navigate();
        }

        private void DisplayTaskPane(CustomTaskPane taskPane)
        {
            taskPane.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionLeft;
            taskPane.Width = Convert.ToInt32(Globals.ThisAddIn.Application.ActiveWindow.Width);
            taskPane.DockPositionRestrict = Microsoft.Office.Core.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
            taskPane.Visible = true;

            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Visible = true;

            _webBrowser.Dock = DockStyle.Fill;
            _webBrowser.Visible = true;
        }

        private void Navigate()
        {
            _webBrowser.Navigate(new Uri("about:blank"));
        }
    }

Для удобства я удалил часть автоматически сгенерированного кода и WebBrowserHelper, который вы найдете здесь: WebBrowserHelper

Вот изображение WebPanel, это WebBrowser в компоненте TableLayout:

WebPanel Designer

И вот результат при запуске проекта, переходе на ленту и нажатии кнопки:

WebPanel result

Как видите, веб-браузер не отображается. Я пробовал с Uri и без, о: blank и google, но результат всегда один и тот же.

Кто-нибудь имеет представление о том, что может быть проблема здесь?

РЕДАКТИРОВАТЬ :
Очевидно, что веб-браузер все еще работает в Windows 7, но не в Windows 10. Я проверил это на нескольких машинах, которые имеют одинаковую версию Internet Explorer (11.0.17134.829). Если проблема в ОС, могу ли я что-нибудь сделать?

1 Ответ

1 голос
/ 10 июля 2019

У нас такая же проблема. Здесь есть похожая тема , , за исключением того, что у него проблема в Outlook. Обходным решением является переключение с «Оптимизировать для лучшего внешнего вида» на «Оптимизация для совместимости» в Outlook или Excel >> Файл >> Параметры >> Общие. Я могу подтвердить, что это работает для нашей надстройки Excel.

...