Web Browser控件,C++调用JS

void CcaterpDlg::ShowOrHideAudioBTN( bool bShow )
{
	CString strJsName = _T("showOrHideAudio");
	CStringArray csa;
	CComVariant VarResult;
	CString strJsParam = _T("0");
	if (bShow)
	{
		strJsParam = _T("1");
	}
	csa.Add(strJsParam);
	CallJScript(strJsName , csa, &VarResult );
}


BOOL CcaterpDlg::CallJScript( const CString strFunc, const CStringArray& paramArray,CComVariant* pVarResult )
{
	if (m_pWeb==NULL)
	{
		return FALSE;
	}

	CComPtr<IDispatch> spScript=NULL;
	if(!GetJScript(spScript))
	{
		LOG_ERROR(_T("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))
	{
		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);

	delete [] dispparams.rgvarg;
	if(FAILED(hr))
	{
		return FALSE;
	}

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

BOOL CcaterpDlg::GetJScript( CComPtr<IDispatch>& spDisp )
{
	if (m_pWeb==NULL)
	{
		return FALSE;
	}

	CComPtr<IHTMLDocument2> pHtmlDoc=NULL;
	CComPtr<IDispatch> spDocDisp;
	HRESULT hr;
	if(spDisp == NULL)
	{
		spDocDisp = m_pWeb->get_Document();

		if(spDocDisp)
		{
			hr = spDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc);
			if (SUCCEEDED(hr) && pHtmlDoc)
			{
				// get script
				hr = pHtmlDoc->get_Script(&spDisp);
				ATLASSERT(SUCCEEDED(hr));

			}
		}
	}
	ATLASSERT(SUCCEEDED(hr));
	return SUCCEEDED(hr);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值