Система.NotSupportedException при доступе к переменной IHTMLDocument2.Script в 32-разрядном Outlook после второго перехода

#javascript #vb.net #outlook #mshtml #ihtmldocument2

#javascript #vb.net #outlook #mshtml #ihtmldocument2

Вопрос:

Я работаю над надстройкой в Outlook, используя VB.Сеть, которая просматривает 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:

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

execScript

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

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

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

Комментарии:

1. к сожалению, даже при использовании eval наблюдается такое же поведение