在第二次导航后访问32位Outlook中的IHtmlDocument2.Script变量时出现System.NotSupportedException

问题描述 投票:0回答:1

我正在使用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())

我不明白这种行为,我将不胜感激任何帮助。我怀疑它与某些缓存有关,但我不知道在哪里,我在互联网上搜索这个没有成功。

javascript vb.net outlook mshtml ihtmldocument2
1个回答
0
投票

来自this MSDN page

EXECSCRIPT

注意不再支持IHTMLWindow2 :: execScript。从IE11开始,使用eval。有关信息,请参阅兼容性更改。

以提供的语言执行指定的脚本。

自从我涉足Outlook Add-Ins以来已经很长时间了,但看起来首选的方法是使用eval。我知道这可能不是你想听到的答案,但那是我开始的地方!

© www.soinside.com 2019 - 2024. All rights reserved.