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
。
以前にこの種の操作を行った経験のある人はいますか?