3

webbrowser コントロールを使用して web ページを読み込んでいます。その中には、javascript によって生成されるフォームがあります。

C# で要素にアクセスしようとすると、それらが見つかりません。

ページは通常のブラウザーで適切にレンダリングされますが、私の winforms アプリではフォーム要素がレンダリングされず、ダブギング時にフォームを生成した JavaScript しか表示されません

スタックで見つけた近い解決策は、 to をキャストするwebbrowser.document.domdocumentことでしたihtmldocumentが、成功していません。

これがやろうとしていることです

Dim doc As HtmlDocument = DirectCast(wbMain.Document.DomDocument, MSH.IHTMLDocument)

しかし、私はこの警告を受け取ります

「mshtml.IHTMLDocument」を「System.Windows.Forms.HtmlDocument」に変換するときにランタイム エラーが発生する場合があります。

無視して実行すると、このエラーが発生しました

タイプ 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス タイプ 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインスタンスは、COM コンポーネントを表さない型にキャストできません。ただし、基になる COM コンポーネントがインターフェイスの IID に対する QueryInterface 呼び出しをサポートしている限り、インターフェイスにキャストできます。

EDIT サンプルの JavaScript

<SCRIPT type=text/javascript>  
        (function(){            
        function runElemGen() {
       var ElemGenForm = [{"label":"Email:","name":"ElemGen_email_field","oldName":"","value":"","ElemGen":"text"},{"label":"","name":"ElemGensubscribe","oldName":"","value":"Submit","ElemGen":"submit"}];
       ElemGenBuildForm({makeDivs: true, arr:ElemGenForm, place:"ElemGen-email-form-"});                
        }
      if (window.addEventListener) {
        window.addEventListener("load", runElemGen, false);
      } else {
        window.attachEvent("onload", runElemGen);
      }
    })();
</SCRIPT>

誰でも解決策を教えてもらえますか

4

2 に答える 2

3

編集:以下の解決策は、OPがデバッグ目的でdomにアクセスできないことを修正します。OP は実際には、ドキュメントが期待どおりに (またはまったく) 表示されないという問題を解決する必要がありWebBrowserControlます。これWebBrowserControlは、同じ名前の ActiveX コントロールの再パッケージであるため、現在インストールされているバージョンの Internet Explorer を使用する可能性があります。可能であれば、問題のコンピューターで IE を起動し、同じドキュメントのレンダリングを試みることをお勧めします。これには、ドキュメントを読み込むために使用されるコードも含まWebBrowserControlれており、問題の診断にも役立ちます。

次のようなものが欲しいと思います:

if (webBrowser1.Document != null)
{
    var currentDoc = (MSHTML.IHTMLDocument2)webBrowser1.Document.DomDocument;
    return (currentDoc.lastModified);
}

IHTMLDocumentからへの変換HtmlDocumentは無効です。

IHTMLDocument2プロパティとメソッドのドキュメントは次のとおりです。

それを拡張すると、上記の例でwebBrowser1.DocumentSystem.Windows.Forms.HtmlDocument. そのDomDocumentプロパティは、ドキュメントへのアンマネージ ポインターです。Documentブラウザー コントロールの管理プロパティで公開されていないドキュメントのプロパティを探している場合にのみ必要です。

于 2012-09-23T18:52:12.807 に答える
0

生成されたフォームが Web ブラウザー コントロールに表示されていないとおっしゃいましたが、通常の Internet Explorer セッションに表示されているのではないでしょうか? WebBrowser コントロールを実行すると、IE 7.0 レンダリング エンジンで実行されることをご存知ですか? これは互換性のために行われます。そのため、JS に IE バージョン 8.0 以降を必要とするものがある場合、いくつかのレジストリ設定を具体的に変更 (またはメタデータ タグの挿入) しない限り、webbrowser コントロールでは機能しません。現在インストールされている IE のバージョン、または選択した特定の固定バージョン。

これが問題である場合、次の質問に対する私の答えは、ほぼ確実に問題を解決します。ここで見つけることができます:スクリプトは dotnet WebBrowser コントロールでより遅く実行されます

状況を教えてください。問題が解決する場合は、問題が解決しない場合は、解決策が見つかるまでお手伝いします.

于 2012-10-02T09:23:04.900 に答える