我正在使用VB .Net开发一个插件,它使用mshtml界面查看阅读窗格中的html窗口。该页面有一些我使用IHtmlWindow2.execScript调用的javascript代码。我使用IHtmlWindow2.navigate(url)函数加载页面,并通过执行以下操作访问一些javascript变量:
Dim htmlWindow As IHTMLWindow2
htmlWindow.execScript("x=somefunction();","javascript")
Dim result as String = htmlWindow.document.Script.x.ToString()
当我从outlook 64bit实例运行它时这个代码工作正常...运行outlook 32bit实例的插件(无论是在32位还是64位机器上)它在htmlWindow上执行第二次导航后给出System.NotSupportedException,当我第一次导航到网址和执行此代码它没有问题。 在outlook中加载的页面上使用Internet Explorer调试器F12Chooser,下面的代码执行时没有错误并返回所需的值。
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())
我不明白这种行为,我将不胜感激任何帮助。我怀疑它与某些缓存有关,但我不知道在哪里,我在互联网上搜索这个没有成功。
EXECSCRIPT
注意不再支持IHTMLWindow2 :: execScript。从IE11开始,使用eval。有关信息,请参阅兼容性更改。
以提供的语言执行指定的脚本。
自从我涉足Outlook Add-Ins以来已经很长时间了,但看起来首选的方法是使用eval。我知道这可能不是你想听到的答案,但那是我开始的地方!