System.NotSupportedException при доступе к переменной IHtmlDocument2.Script в 32-разрядной версии после второй навигации - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над надстройкой в ​​outlook, используя VB .Net, которая просматривает HTML-окно на панели чтения, используя интерфейс mshtml. На странице есть некоторый код JavaScript, который я вызываю с помощью IHtmlWindow2.execScript. Я загружаю страницу, используя функцию IHtmlWindow2.navigate (url), и получаю доступ к некоторым переменным JavaScript, выполняя следующие действия:

Dim htmlWindow As IHTMLWindow2
htmlWindow.execScript("x=somefunction();","javascript")
Dim result as String = htmlWindow.document.Script.x.ToString()

Этот код работает нормально, когда я запускаю его из 64-битного экземпляра outlook ... при запуске надстройки из 32-битного экземпляра outlook (на 32-битной или 64-битной машине) он выдает System.NotSupportedException после выполнения второго перехода по htmlWindow, когда я сначала перейдите к URL и выполните этот код, он работает без проблем.

с помощью отладчика Internet Explorer F12Chooser на загруженной странице в outlook приведенный ниже код выполняется без ошибок и возвращает требуемое значение.

x=somefunction();
window.document.Script.x;

Однако я попробовал переломный момент на

htmlWindow.execScript("x=somefunction();","javascript")

и выполнил тот же код в непосредственном окне Visual Studio, но с другим именем переменной каждый раз, когда я выполняю навигацию, я не получаю исключения

htmlWindow.execScript("y=somefunction();","javascript")
MessageBox.Show(htmlWindow.document.Script.y.ToString())

Я не понимаю этого поведения, и я был бы признателен за любую помощь в этом. Я подозреваю, что это как-то связано с кэшированием, но я не знаю, где, я искал в интернете это безуспешно.

1 Ответ

0 голосов
/ 04 апреля 2019

С этой страницы MSDN :

execScript

Примечание. IHTMLWindow2 :: execScript больше не поддерживается. Начиная с IE11, используйте eval .Для получения дополнительной информации см. Изменения совместимости.

Выполняет указанный сценарий на указанном языке.

Прошло много времени с тех пор, как я работал с надстройками Outlook, но похоже, чтопредпочтительный метод - использовать eval.Я знаю, что это, вероятно, не тот ответ, который вы хотели бы услышать, но именно с этого я и начну!

...