4

IHtmlDocument2.designModeプロパティをに設定して、WindowsフォームフォームでホストされてOnいるコントロールを編集モードに切り替えるWebBrowserと、Microsoft Internet Explorer9RCのインストール後に突然機能しなくなりました。

質問:

これを修正するチャンスはありますか?

私はすでにdoctypeまたはmetaタグで微調整を試みましたEmulateIE7が、成功しませんでした。

(例はこのプロジェクトです


更新2011-02-21:

Eric Lawrenceが提案したように、編集モードを設定する前に、 「ゼータ」の例を調整してドキュメントテキストを設定しました。

残念ながら、私もデザインモードに切り替えることができませんでした。


更新2011-02-24:

ディスカッションの一部は、Ericのブログでも行われます。


更新2011-02-26:

私が現在経験していることは、HTTP URLと、を介して追加されたコンテンツでは動作が異なるように見えることですWebBrowser.DocumentText

最初のテストはこの仮定を証明しているようです。

これから、この仮定に基づいてソリューションを構築し、更新と概念実証をここに投稿します。


更新2011-02-26(2):

これで、IE 9でも正常に機能していると思われる組み込みのWebサーバーを使用して概念実証を構築しました。ダウンロードして、機能しているかどうかをテストし、簡単なフィードバックをお寄せください。このためのソースコードをクリーンアップしてリリースします。


更新2011-02-26(3):

まだフィードバックはありませんが、HTML Edit Controlの記事を更新し、CodeProjectでデモを行いました。


更新2011-03-16:

Internet Explorer 9が昨日リリースされたため、 HTML Edit Controlの記事で説明されているように、統合されたWebサーバーでアイデアを使用するように主要な製品を更新しました。

ほぼ1か月のテストの後、私はそれが非常にうまくいくと思います。

このアプローチで将来問題が発生した場合は、ここにコメントを投稿してください。調査して修正できます。

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ブラウザインスタンスは、問題なくdesignModeに入ります。デザインモードに入った後にドキュメントテキストを設定しないように「ゼータ」の例を変更すると、それも正常に機能します。

于 2011-02-21T00:14:18.250 に答える
1

私もdesignmodeに入ることができないことを付け加えたいと思います(私の場合はWebBrowserコントロールを使用しています)。これはベータ版では問題ではありませんでした。RCで間違いなく新しい。

于 2011-02-25T23:07:01.317 に答える
1

別のCodeProjectユーザーは、次のコードを使用することを提案しました。

まず、イベントを追加します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

昨日、Internet Explorer9RTMがついにリリースされました。

コントロールにさらに小さな調整を加えましたが、基本的には、統合された小さなWebサーバーを使用したアイデアはかなりうまく機能しているようです。

したがって、解決策はこのCodeProjectの記事にあります。

ゼータHTML編集コントロール
Windowsフォーム2.0WebBrowserコントロールの周りの小さなラッパークラス

これが私のために働いた唯一の解決策でした。

自分の質問に答えて、自分の答えにも「回答済み」のマークを付けても大丈夫だと思いますか?!?

于 2011-03-16T06:18:31.967 に答える
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 に答える