У нас есть приложение для Windows, которое содержит элемент управления ActiveX WebBrowser. В рамках обычной работы этого приложения вносятся изменения в страницы, отображаемые элементом управления ActiveX WebBrowser. Часть этих изменений включает установку переменной JavaScript на веб-странице, загружаемой в ActiveX WebBrowser.
Нам нужно инициализировать эту переменную в 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>
Мы хотим получить доступ к переменной field и присвоить ей значение. В VB6 код для этого был довольно прост:
doc.Script.field = 'newValue'
Однако в C # нам пришлось прибегнуть к другим трюкам, например:
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);
Смысл страницы в том, чтобы проверить, была ли наша переменная правильно назначена C #. Нажатие на кнопку должно дать любое новое значение, введенное C #. Например, нажав на кнопку на странице, мы получим предупреждение: «newValue».
Это работает в первый раз, но не работает, если мы перезагрузим страницу. При последующих вызовах мы не можем установить значение переменной field
.
Кто-нибудь имел опыт работы с подобными операциями раньше?