1

ActiveX WebBrowser コントロールを含む Windows アプリケーションがあります。このアプリケーションの通常の操作の一部として、ActiveX WebBrowser コントロールによって表示されるページに変更が加えられます。これらの変更の一部には、ActiveX WebBrowser に読み込まれる Web ページに JavaScript 変数を設定することが含まれます。

この変数は C# 内で初期化する必要があります (元は、VB6 コードが値を初期化していました)。この変数の値は、COM 可視クラス オブジェクトです。

ただし、簡単にするために、問題を文字列値の設定に減らしました。元のページにはフレームなどが含まれていますが、次のようなページでも同じ問題が発生します。

<HTML>
 <HEAD>
  <TITLE>Test</TITLE>
  <SCRIPT type="text/javascript">
   var field = 'hello world';
  </SCRIPT>
 </HEAD>
 <BODY>
   <input type="button" value="See field" onclick="javascript:alert(field);"/>
 </BODY>
</HTML>

フィールド変数にアクセスして値を代入します。VB6 では、このコードは非常に単純でした。

doc.Script.field = 'newValue'

ただし、C# では、次のような別のトリックに頼る必要がありました。

Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);

このページのポイントは、変数が C# によって適切に割り当てられているかどうかをテストすることです。ボタンをクリックすると、C# によって注入された新しい値が生成されます。たとえば、ページ内のボタンをクリックすると、「newValue」というアラートが表示されます。

これは最初は機能しますが、ページをリロードすると機能しません。後続の呼び出しでは、変数の値を設定できませんfield

以前にこの種の操作を行った経験のある人はいますか?

4

4 に答える 4

7

あなたが探しているのはeval()Javascriptのメソッドだと思います。次のように C# から呼び出すことができます。

webBrowser1.Document.InvokeScript("eval", new String[] {"1 + 2"});

このコードは評価され"1 + 2"、 を返し"3"ます。あなたが入れるなら、私はそれを想像するでしょう

InvokeScript("eval", new String[] {"varName = 3"})

ファイルでグローバルに表示されている場合、その変数は 3 に割り当てられます。

于 2009-11-19T14:44:28.833 に答える
2

webBrowser コントロールを使用する場合は、ac# オブジェクトを objectForScripting プロパティ http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspxに割り当てることができます。

その後、javascript で window.external を使用して、javascript から c# オブジェクトを操作できます。

何らかの理由で ActiveX バージョンを使用する場合は、javascript: urls を渡してプログラムで変数を設定するか、webservice/database/file を使用するか、単に提案した方法を使用してスクリプトを同期できます。

于 2008-10-14T06:22:26.040 に答える
1

この 2 つの記事は、問題の解決策を見つけるのに役立ちました。彼らは、知っておくべきことの基本を概説しています:

C# を使用した Microsoft Web ブラウザーの自動化

MSHTML の高度なホスティング インターフェイスの使用

そこで、DocHostUIHandler インターフェイスを実装し、UIHandler を設定できるようにして、Javascript からメソッドを参照できるようにしました。

于 2008-09-26T19:18:31.850 に答える
0

私たちが使用する通常の方法は、隠しテキスト入力ボックス (ASP.Net コントロール バージョン) をページに追加することです。そうすれば、C# コードビハインドで値を簡単に設定し、クライアント側の JavaScript で値を読み取ることができます (もちろん、その逆も可能です)。

于 2008-09-25T21:18:31.423 に答える