描述:
写了一个ActiveX控件,放在网页上。想在这个ActiveX控件里面获得post到该网页的数据。该如何实现呢?
解决方案1:
CComPtr<IObjectContext> pObjContext;
hr = ::GetObjectContext(&pObjContext);
if (SUCCEEDED(hr))
{
// Get the Properties interface
CComPtr<IGetContextProperties> pProps;
hr = pObjContext->QueryInterface(IID_IGetContextProperties,
(void**) &pProps);
if (SUCCEEDED(hr))
{
CComBSTR bstrRequest(_T("Request"));
CComVariant vt;
hr = pProps->GetProperty(bstrRequest, &vt);
if (SUCCEEDED(hr))
{
if (V_VT(&vt) == VT_DISPATCH )
{
CComPtr<IRequest> piRequest;
CComPtr<IRequestDictionary> piRequestDictionary;
IDispatch* pDispatch = V_DISPATCH(&vt);
if (pDispatch != NULL)
hr = pDispatch->QueryInterface(IID_IRequest,
(void**) &piRequest);//得到Request,后面的现在没时间研究,你自己看MSDN
}
}
}
}
我再参与一下:
我觉得我所说的网页与你所说的网页是两个。我说的网页既包含表单,又包含你提到的ACTIVEX控件。你说的网页是只仅包含ACTIVEX控件的,是吗?
我从未接触过WEB编程,所以不知道所说的是否正确:
我理解的是当浏览器发POST请求时,实际上这个请求是发送给了WEB服务器,所以从网页上(位于客户端)上无法直接获得这些数据。
我想一个变通的方法,是让网页中的脚本响应SUBMIT按钮点击事件,这时获取FORM中的各字段的数据,再由该段脚本传给该ACTIVEX控件处理。
所言一定有误,请各位指正。
问题是数据提交后必须由Web Server处理后才可以获取,否则就不需要提交Post直接赋值给ActiveX就可以了.
在ActiveX可以调用执行JavaScript脚本.可以到VCKbase上查看例子:
http://www.vckbase.com/document/listdoc.asp?mclsid=17&sclsid=1711
另ASP是运行在IIS服务器,ActiveX运行在客户端,你当然可以通过
YourOCX.PropertyName="<%=Value%>";来进行,但这样就存在你的安全问题,需要加密.
你也可以创建服务器Com+供ActiveX通讯来获取数据.
如果你用的是ASP,可以给IIS加过滤器判断Post的数据然后保存数据供ActiveX访问.
因为Post方法是需要CGI程序响应的,而ActiveX跟CGI是两回事.
至于安全问题可以用CAPICOM这个组件来实现脚本加密.下载地址我忘了,你搜索以下.
例子:
<script>
var m_Cert=new ActiveXObject("CAPICOM.Certificate");
//m_Cert.Import("");
m_Cert.Display();
//var m_Hash=new ActiveXObject("CAPICOM.HashedData");
//m_Hash.hash("");
//window.confirm(m_Hash.Value);
</script>
没有可能,除非自己写个CGI程序[或者asp,jsp什么的]处理后再传给ActiveX.
这个ActiveX控件里面获得post到该网页的数据????????????