Internet Explorer 9 RC останавливает мой элемент управления WinForms WebBrowser для работы в режиме редактирования - PullRequest
4 голосов
/ 15 февраля 2011

Использование свойства IHtmlDocument2.designMode, установленного на On, для переключения элемента управления WebBrowser, размещенного в форме Windows Forms, в режим редактирования, внезапно перестал работать после установки Microsoft Internet Explorer 9 RC.

Вопрос:

Есть ли шанс исправить это?

Я уже пытался настроить с помощью doctype или метатегом EmulateIE7но безуспешно.

(Примером может быть этот проект )


Обновление 2011-02-21:

Как подсказал Эрик Лоуренс , я настроил пример "Zeta" , чтобы задать текст документа перед установкой режима редактирования.

К сожалению, мне не удалось переключитьсялибо в режим разработки.


Обновление 2011-02-24:

Части обсуждения также проходят в блоге Эрика .


Обновление 2011-02-26:

В настоящее время я считаю, что поведение HTTP UR выглядит по-другомуLs и для контента, который был добавлен с помощью WebBrowser.DocumentText.

Первые тесты, кажется, подтверждают это предположение.

Сейчас я собираюсь построить решение на основе этого предположения и опубликовать обновления и подтверждениездесь.


Обновление 2011-02-26 (2):

Я сейчас построил проверку концепции с помощьювстроенный веб-сервер, который, я считаю, также хорошо работает с IE 9. Если кто-то захочет загрузить и протестировать , работает ли он и дать мне короткую обратную связь, я могу очистить и выпустить исходный код


Обновление 2011-02-26 (3):

Пока нет отзывов, я все еще обновил статью HTML Edit Control и демонстрацию в Code Project.


Обновление 2011-03-16:

Со времени выхода Internet Explorer 9 вчера мы обновили нашу основную версиюпродукты для использования идеи со встроенным веб-сервером, как описано в статье HTML Edit Control .

После почтимесяц тестирования, я думаю, что он работает довольно хорошо.

Если у вас возникнут какие-либо проблемы в будущем с этим подходом, пожалуйста, оставьте свои комментарии здесь, и я могу исследовать и исправить.

Ответы [ 9 ]

8 голосов
/ 16 марта 2011

У меня была похожая проблема, и я решил ее, добавив следующую строку в событие DocumentCompleted:

 ((HTMLBody)_doc.body).contentEditable = "true";
2 голосов
/ 21 апреля 2011

Нам просто нужен пустой редактируемый элемент управления. Однако я прошел через отладчик и добавил значение в InnerHtml элемента управления, и он хорошо отобразился, и я мог его отредактировать.

Небольшое обновление, мы смогли получить редактируемый элемент управления также с помощью этой строки:

browserControl.browser.Document.Body.SetAttribute("contentEditable", "true");

Это позволяет нам не ссылаться на mshtml (не обязательно включать Microsoft.mshtml.dll)

Это позволяет нам не увеличивать размер установки на 8 мегабайт.

1 голос
/ 18 марта 2011

Исправлено, если свойство установлено после загрузки документа

private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{

    IHTMLDocument2 Doc = Document.DomDocument as IHTMLDocument2;
    Doc.designMode = @"On";
}
1 голос
/ 16 марта 2011

Другой пользователь проекта кода предложил использовать следующий код:

Сначала добавьте событие DocumentCompleted:

private void SetupEvents()
{
    webBrowser1.Navigated += webBrowser1_Navigated;
    webBrowser1.GotFocus += webBrowser1_GotFocus;
    webBrowser1.DocumentCompleted += this.theBrowser_DocumentCompleted;
}

Затем напишите функцию:

private void theBrowser_DocumentCompleted(
    object sender, 
    WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser1.Document.Write(webBrowser1.DocumentText);
    doc.designMode = "On";
}

Хотя я не проверял это, я хочу документировать это здесь для полноты.

1 голос
/ 26 февраля 2011

Просто хочу добавить, что я также не могу войти в режим проектирования (в моем случае используется элемент управления WebBrowser). Это не было проблемой в бета-версии. Определенно новый с RC.

1 голос
/ 21 февраля 2011

Какой у вас точный код?

Если я установлю следующий код:

    private void cbDesign_CheckedChanged(object sender, EventArgs e){
        var instance =
    Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(
    wbView.ActiveXInstance,
    null,
    @"Document",
    new object[0],
    null,
    null, null );

         var objArray1 = new object[] { cbDesign.Checked ? @"On" : @"Off" };

    Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSetComplex(
    instance,
    null,
    @"designMode",
    objArray1,
    null,
    null,
    false,
    true );

Экземпляр веб-браузера IE9 без проблем входит в designMode. Если вы измените пример «Zeta», чтобы не вводить текст документа после перехода в режим разработки, он также работает нормально.

0 голосов
/ 27 января 2013

Я использую HTML Editor Control, я решил эту проблему, добавив событие DocumentComplete

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    (((sender as WebBrowser).Document.DomDocument as IHTMLDocument2).body as HTMLBody).contentEditable = "true"; 
}
0 голосов
/ 20 апреля 2011

Мне также удалось заставить это работать, используя следующее внутри события DocumentCompleted:

IHTMLDocument2 Doc = browserControl.browser.Document.DomDocument as IHTMLDocument2;
if (Doc != null) Doc.designMode = @"On";

Спасибо всем!

0 голосов
/ 16 марта 2011

Вчера Internet Explorer 9 RTM наконец-то был выпущен.

Я сделал еще несколько крошечных изменений в своем контроле, но в принципе идея с интегрированным небольшим веб-сервером, кажется, работает довольно хорошо.

Итак, решение находится в этой статье Code Project:

Zeta HTML Edit Control
Небольшой класс-оболочка для WindowsУправление WebBrowser Forms 2.0

Это было единственное решение, которое сработало для меня.

Я надеюсь, что можно ответить на мой собственный вопрос и пометить мой ответ как "отвеченный"тоже?!?

...