在activeX对象中判定所在网页

一个很原始的需求是:做了一个activex对象,只希望它在某些站点中使用。不希望在其它站点中使用。

或者说,不希望被别的人偷用。或者不希望被广泛使用而造成安全问题。

比如:在www.foo.com中可以使用,在www.bar.com中不能使用。

由于只有ie能创建并访问activeX,因此本文只适用于IE。

要解决这个问题,关键是两点:

  1. 如何在activex对象中判定当前域名或当前所在网页url。
  2. 如何在判定不能使用后,禁止用户使用。

对于2,应该是简单的,不能使用后,所有的接口都返回E_FAIL即可。当然,这里有更好的策略,还可以通知到用户。

对于1,我以前一直没有找到办法,虽然办法很简单。无非是实现一下IObjectWithSite,这样IE在创建activex的时候会把site传给创建的activex,这样就容易取得当前url了:

 
HRESULT CMyActiveX::SetSite(IN IUnknown *pUnkSite)
{
 
CComQIPtr<IServiceProvider> spsp = pUnkSite;
pUnkSite->QueryInterface(&m_WebBrowser2);
 
m_WebBrowser2->get_LocationURL(&m_bsUrl);
 
//more..
 
}

对于2,通知到用户的办法是,实现IObjectSafety,然后,在GetInterfaceSafetyOptionsSetInterfaceSafetyOptions中,根据当前情况返回E_FAIL就行了。

以上内容是是研究微软的某软件的一个activex控件在不同网页里的表现不同而发现的。

此条目发表在开发分类目录。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

*