【发布时间】:2012-08-14 16:19:35
【问题描述】:
我正在开发一个 vb.net 应用程序,该应用程序与(第三方提供的)网络应用程序交互以提供附加功能(例如,删除菜单项、从页面中提取信息等)。该网络应用完全由 javascript 驱动,但托管在 asp.net 中,并且仅与 Internet Explorer 一起使用。
我正在尝试从 javascript 对象中读取属性并执行其中的一些功能。我已经设法通过获取脚本所在 iframe 的 mshtml.HTMLDocument 并使用以下代码来获取 javascript 对象:
Dim jsObject as Object
jsObject = htmldoc.Script.jsObject
jsObject 作为 {System.__ComObject} 存在,我可以使用它来执行它的任何功能或读取它的属性,如下所示:
Dim value as String = jsObject.FunctionThatReturnsAString()
jsObject.FunctionTHatDoesSomethingInWebApp("Param1", "Param2")
这很好用。但是,当我离开带有 jsObject 的页面/框架并返回它时,当再次从框架中获取 javascript 对象时(即执行以下行),相同的代码会引发异常:
jsObject = htmldoc.Script.jsObject
例外:未找到成员。 (来自 HRESULT 的异常:0x80020003 (DISP_E_MEMBERNOTFOUND))
如果我停止调试并重新启动,它会再次工作(直到我离开页面等)。就我的应用程序而言,我不确定发生了什么导致 javascript 对象消失。我假设这是由于我的应用程序持有对 COM 对象的引用,我需要以某种方式释放它(特别是因为它具有 MarshalByRefObject 的基本类型 - 这很有意义,因为它在应用程序域之间传递)。
为什么会这样?有没有更好的方法来访问 javascript 对象,它的属性和函数?
【问题讨论】:
标签: vb.net mshtml dom marshalbyrefobject comobject