IE9中IE9文档模式 MSHTML.IDispatch.GetIDsOfNames 无法得到IDs
使用 MSHTML.IHTMLWindow2.execScript 插入了一段JavaScript,其中包含某函数。
在IE6、7、8中,使用MSHTML.IDispatch.GetIDsOfNames找到函数,后再使用MSHTML.IDispatch.Invoke执行,一切正常。
但是在IE9中IE9文档模式时,MSHTML.IDispatch.GetIDsOfNames找不到函数,异常 COMError: -2147352570 未知名称。
通过微软自带的IE开发者工具查找函数并执行,一切正常。那么MSHTML.IHTMLWindow2.execScript是通过了,关键就是MSHTML.IDispatch.GetIDsOfNames这里的问题了。
这种情况哪位先行者遇到过? 是不是IE9的新的安全机制? 我主要目的是调用WEB内的JavaScript,白盒测试。
目前发现GetIDsOfNames可以找到window和document的ID
但是HTML内混合编写的JavaScript成员不能得到ID,报错“未知名称”。尝试获取eval的ID也是失败。
问题继续存在
这个跟Java无关,隶属于Win32API和Win32COM,也算属于安全。
1
down vote
favorite
3 I have an Internet Explorer BHO that can execute a script on the current website and then read variables that have been assigned in that script. Unfortunately, as of IE9 (I tested with the RC), reading the JS variable results in a HRESULT 0x80020006.
The script sets assigns the JS variable as follows:
this.<js_var> = <value>
where this is the current Window object. It is executed using
hr = pWindow->execScript( ccom_js, lang, &vEmpty );
and the JS variable is read using
bool get_js_var( CComPtr<IDispatch> pDisp, LPOLESTR name, VARIANT *dest )
{
DISPID id;