4

在安装 Microsoft Internet Explorer 9 RC 后,使用IHtmlDocument2.designMode设置为的属性将托管在 Windows 窗体窗体上On的控件切换到编辑模式突然停止工作。WebBrowser

问题:

有机会解决这个问题吗?

我已经尝试使用 doctype 或EmulateIE7meta 标签进行调整,但没有成功。

(一个例子就是这个项目


2011-02-21 更新:

正如Eric Lawrence所建议的,我在设置编辑模式之前调整了“Zeta”示例以设置文档文本。

不幸的是,我也没有设法切换到设计模式。


2011-02-24 更新:

部分讨论也在 Eric 的博客中进行。


2011-02-26 更新:

我目前的经验是,对于 HTTP URL 和通过WebBrowser.DocumentText.

第一次测试似乎证明了这个假设。

我现在将围绕这个假设构建一个解决方案,并在此处发布更新和概念验证。


更新 2011-02-26 (2):

我现在已经使用内置 Web 服务器构建了一个概念验证,我相信它在 IE 9 上也能很好地工作。如果有人想下载并测试它是否工作并给我一个简短的反馈,我可以清理并发布源代码。


更新 2011-02-26 (3):

还没有反馈,我仍然在代码项目中更新了HTML 编辑控件文章和演示。


2011-03-16 更新:

自从 Internet Explorer 9 昨天发布以来,我们更新了我们的主要产品,以使用HTML 编辑控件文章中描述的集成 Web 服务器的想法。

经过近一个月的测试,我认为它工作得很好。

如果您将来确实在使用此方法时遇到任何问题,请在此处发表您的评论,我可以进行调查和修复。

4

9 回答 9

8

我遇到了类似的问题,并通过在 DocumentCompleted 事件中添加以下行来解决它:

 ((HTMLBody)_doc.body).contentEditable = "true";
于 2011-03-16T14:07:00.107 回答
2

我们只需要一个空的可编辑控件。然而,我确实逐步调试器并向控件的 InnerHtml 添加了值,它显示得很好,我可以对其进行编辑。

小更新,我们也可以使用此行获得可编辑的控件:

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

这使我们可以避免引用 mshtml,(不必包含 Microsoft.mshtml.dll)

这使我们可以避免将安装大小增加 8 兆。

于 2011-04-21T11:24:47.540 回答
1

你的确切代码是什么?

如果我设置以下代码:

    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 Web 浏览器实例进入设计模式没有任何问题。如果您将“Zeta”示例更改为在进入设计模式后不设置文档文本,它也可以正常工作。

于 2011-02-21T00:14:18.250 回答
1

只想补充一点,我也无法进入设计模式(在我的情况下使用 WebBrowser 控件)。这在测试版中不是问题。RC绝对是新的。

于 2011-02-25T23:07:01.317 回答
1

另一个 Code Project 用户建议使用以下代码:

首先,添加事件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";
}

虽然我没有对此进行测试,但为了完整起见,我想在这里记录它。

于 2011-03-16T06:15:25.260 回答
1

如果在加载文档后设置属性,则已修复

private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{

    IHTMLDocument2 Doc = Document.DomDocument as IHTMLDocument2;
    Doc.designMode = @"On";
}
于 2011-03-18T10:15:59.757 回答
0

我还能够在 DocumentCompleted 事件中使用以下内容来使其工作:

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

感谢大家!

于 2011-04-20T17:05:26.593 回答
0

我使用 HTML 编辑器控件,我解决了添加DocumentComplete事件的这个问题

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    (((sender as WebBrowser).Document.DomDocument as IHTMLDocument2).body as HTMLBody).contentEditable = "true"; 
}
于 2013-01-27T15:53:43.140 回答
0

昨天,Internet Explorer 9 RTM 终于发布了。

我对我的控制做了一些更小的调整,但基本上集成的小型 Web 服务器的想法似乎运作良好。

所以解决方案在这篇代码项目文章中:

Zeta HTML 编辑控件
一个围绕 Windows Forms 2.0 WebBrowser 控件的小型包装类

这是唯一对我有用的解决方案。

我希望可以回答我自己的问题并将我的答案标记为“已回答”?!?

于 2011-03-16T06:18:31.967 回答