高分求教:BHO技术拦截Flash,但写入的js代码无效!

shines77 2005-05-13 01:42:57
使用IE的BHO技术,Browser Helper Object写的Flash拦截,原来的Flash代码已经被替换成我定义的HTML了,但写入的JS代码(JavaScript)代码却无效,好像被过滤或没有生效

在事件OnDocumentComplete, OnNavigateComplete2完成后替换原来的Flash Code

不知道该如何让写入的JS生效,多指教。谢谢~
呵呵,不好意思,高分也只能一次给200,不够再说
...全文
320 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shines77 2005-06-01
  • 打赏
  • 举报
回复
发了个新贴,此贴先结了,我知道我问得唐突也比较白痴(本人也不太喜欢这样的行为),但是由于比较忙,见谅

http://community.csdn.net/Expert/topic/4052/4052185.xml?temp=.4946253
newcore 2005-05-29
  • 打赏
  • 举报
回复
恩...
modena 2005-05-27
  • 打赏
  • 举报
回复
呵呵,顺便送上调用方法:
CStringArray pParam;

pParam.Add( pszServerAddr );
pParam.Add( pszUserName );
pParam.Add( pszPassword );

CallJScript( "SetLastUser", pParam );

CString strStatus;
strStatus.Format("%d", (int) bAutoLogin);

CallJScript( "setLastPasswordStatus", strStatus );


lion_wing 2005-05-26
  • 打赏
  • 举报
回复
OnDocumentComplete, OnNavigateComplete2里,那时,代码执行完了,你写的JS就不执行了。
好的办法,我也没有。
不过,可以在IE加载网页前分析网页代码,然后替换,可是,这样就更改了原来网页的代码,不太好。
不知道楼主有什么好的方法?
lion_wing 2005-05-26
  • 打赏
  • 举报
回复
来了,楼主解决了吗?
shines77 2005-05-26
  • 打赏
  • 举报
回复
FT, 送分都没人要。。。结贴之前我会转到非技术区的
shines77 2005-05-26
  • 打赏
  • 举报
回复
下班了,明天再试试 modena(非云) 的代码,谢谢各位
star_wxd 2005-05-26
  • 打赏
  • 举报
回复
楼上,顶
modena 2005-05-26
  • 打赏
  • 举报
回复
通过如下代码可以直接调用BHO截获的IID_IHTMLDocument2 m_spDoc内的JScript代码

BOOL CallJScript( const CString strFunc, CStringArray& paramArray, CComVariant* pVarResult )
{
CComPtr<IDispatch> spScript;
if(!GetJScript(spScript))
{
ShowError("Cannot GetScript");
return false;
}
CComBSTR bstrMember(strFunc);
DISPID dispid = NULL;
HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,
LOCALE_SYSTEM_DEFAULT,&dispid);
if(FAILED(hr))
{
ShowError(GetSystemErrorMessage(hr));
return false;
}

const int arraySize = paramArray.GetSize();

DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = arraySize;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];

for( int i = 0; i < arraySize; i++)
{
CComBSTR bstr = paramArray.GetAt(arraySize - 1 - i); // back reading
bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
dispparams.rgvarg[i].vt = VT_BSTR;
}
dispparams.cNamedArgs = 0;

EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg

hr = spScript->Invoke(dispid,IID_NULL,0,
DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);

// To get Out Param Value
// Modified by Aking.
// 2003-07-09
for( i = 0; i < arraySize; i++)
{
CString strTmp;

if( dispparams.rgvarg[i].vt == VT_BSTR )
{
strTmp = dispparams.rgvarg[i].bstrVal;
}
else
{
strTmp.Format( "%d", dispparams.rgvarg[i].lVal );
}

paramArray.SetAt( arraySize - 1 - i, strTmp ); // back reading
}

delete [] dispparams.rgvarg;
if(FAILED(hr))
{
ShowError(GetSystemErrorMessage(hr));
return false;
}

if(pVarResult)
{
*pVarResult = vaResult;
}
return true;
}

BOOL GetJScript( CComPtr<IDispatch>& spDisp )
{
if(!m_spDoc) {
return FALSE;
}
CHECK_POINTER(m_spDoc);
HRESULT hr = m_spDoc->get_Script(&spDisp);
ATLASSERT(SUCCEEDED(hr));
return SUCCEEDED(hr);
}
DouDouBug 2005-05-26
  • 打赏
  • 举报
回复
拿分拿分阿
Kudeet 2005-05-19
  • 打赏
  • 举报
回复
解决了
shines77 2005-05-19
  • 打赏
  • 举报
回复
送分了,来者有分,送完为止
shines77 2005-05-13
  • 打赏
  • 举报
回复
自己顶~~我现在采用把js代码直接写在onclick, onmouseover等事件里,OK了,但这个方法比较笨,

比如: <xxxx xxxx onclike='document.all["xxxxx"].style.display="none";return true;'>

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧