Приложение, использующее WebBrowser.DocumentText и DomDocument.DesignMode, работает в IE8 и не работает в IE9 - PullRequest
2 голосов
/ 22 августа 2011

Да, мое использование элемента управления webBrowser прекрасно работает в IE8, а не в IE9.Кажется, что установка HTMLDocument из DesignMode = "On" в DesignMode = "Off" удаляет документ из веб-браузера.Я сделал этот пример, который показывает мою проблему.На форме есть две кнопки и один веб-браузер.Одна кнопка выполняет webBrowser.DocumentText, а другая кнопка переключается между document.DesignMode = "On" и "Off".Кнопка DesignMode использует «CheckOnClick».Я надеюсь, что вы можете увидеть, что он делает.

Теперь, если мы запустим это на машине с IE8;затем переключение в DesignMode и из него оставляет webBrowser.Document на месте.Теперь, если мы запустим это на машине с IE9;затем установка DesignMode на «On» или «Off» приводит к изменению документа webBrowser на «. Если webBrowser находится в DesignMode =« On », и мы устанавливаем DocumentText; тогда webBrowser теперь в DesignMode =« Off ».

Мне не удалось найти способ обойти это поведение, чтобы иметь возможность одновременно использовать webBrowser.DocumentText и DesignMode в IE9. Поведение IE8 работает для меня, а IE9 - нет.не могу представить, как я могу установить DocumentText и затем отредактировать его.

Есть ли настройка или обходной путь, чтобы вернуть поведение IE8? Кажется невозможным иметь возможность использовать DocumentText иDesignMode для того же документа в IE9.

Заранее благодарен за любую помощь. Я потратил много времени на то, чтобы найти свой ответ, но пока не смог.

    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        webBrowser1.DocumentText = "<HTML><BODY>Initial text</BODY></HTML>";
    }

    private void designModeToolStripButton_Click(object sender, EventArgs e)
    {
        if (this.designModeToolStripButton.Checked)
            webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue(webBrowser1.Document.DomDocument, "On", null);
        else
            webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue(webBrowser1.Document.DomDocument, "Off", null);
    }

    private void setTextToolStripButton_Click(object sender, EventArgs e)
    {
        webBrowser1.DocumentText = "<HTML><BODY>New text</BODY></HTML>";
    }
}

Я также попытался выполнить настройку DesignMode в событии WebBrowserDocumentCompleted, и та же проблема возникает (автоматически).

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (this.designModeToolStripButton.Checked)
            webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue(webBrowser1.Document.DomDocument, "On", null);
        else
            webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue(webBrowser1.Document.DomDocument, "Off", null);
    }

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Проблема в том, что когда вы устанавливаете DocumentText, он сбрасывает designMode на «Inherit», а когда вы устанавливаете designMode на «On», он очищает DocumentText. Это, кажется, происходит только в IE 9.

Это исправление сработало для меня:

webBrowser1.Document.Body.SetAttribute("contentEditable", "true");
2 голосов
/ 21 сентября 2012

Спасибо, Eibrahim .. мне кажется, это работает и в моем проекте vb.net. Я использовал это как

Я поместил этот код в событие DocumentCompleted, и он хорошо работал в Win7 + IE8 и Win7 + IE9

    Try
        If WebBrowser1.Document IsNot Nothing AndAlso WebBrowser1.Document.Body IsNot Nothing Then
            WebBrowser1.Document.Body.SetAttribute("contentEditable", "true")
        End If

    Catch ex As Exception
        DumpError(ex)
    End Try
...