我正在开发一个与(第三方提供的)网络应用程序交互的 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 对象,它的属性和函数?