VC中利用webbrowser执行自定义JS函数

原创 2012年03月27日 11:49:08

        转载请注明文章出处与作者信息。

       最近查找了很多资料来执行自定义的JS函数,例如:function TC(){var t=document.title;return t;} 。 网上搜索的资料有蛮多,但是一直没能很快的完成。花了2天时间,终于完成了。特发博记忆与分享下。

        1、首先在源文件里 加入导入库和空间声明:

             

#import "C:\\windows\\system32\\msscript.ocx"
using namespace MSScriptControl;



        2、在程序启动时 初始化COM组件,退出时 释放COM组件:

              

//////初始化COM组件
 CoInitialize(NULL);


////释放COM
 CoUninitialize();


         3、主要的实现代码。

        HRESULT hr;
	IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
	LPSAFEARRAY psa;
	SAFEARRAYBOUND rgsabound[]       = { 1, 0 }; // 1 elements, 0-based
	int i;
	psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
	if (!psa)
	{
		return ;
	}
	VARIANT vFlavors[1];
	for (i = 0; i < 1; i++)
	{
		VariantInit(&vFlavors[i]);
		V_VT(&vFlavors[i]) = VT_BSTR;
	}
	V_BSTR(&vFlavors[0]) = SysAllocString(L"TC_P");
	long lZero = 0;
	hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
	for(i=0;i<1;i++)
	{
		SysFreeString(vFlavors[i].bstrVal);
	}
	pScriptControl->Language = "JScript";
	pScriptControl->AllowUI = TRUE;
	_bstr_t exp = L"function TC(){var t=document.title;return t;}";
	pScriptControl->AddCode(exp);

	IHTMLDocument2   *objDocument1=NULL;
	IHTMLWindow2* pIHTMLWindow1 = NULL;
	objDocument1=(IHTMLDocument2 *)pBrowser.get_Document();
	if(objDocument1)
	{
		objDocument1->get_parentWindow(&pIHTMLWindow1);
		pScriptControl->AddObject("window", pIHTMLWindow1, VARIANT_TRUE);  //这几句代码很重要,没有的话,执行会报错。
	}
	_variant_t outpar = pScriptControl->Run("TC", &psa);   //outpar是js函数执行后的返回值
	// DWORD err = ::GetLastError();
	_bstr_t bstrReturn = (_bstr_t)outpar.bstrVal;
	char *pResult = (char *)bstrReturn;
	SafeArrayDestroy(psa);
	return ;

上面代码是综合了网上很多盆友的思路和代码编写而成。感谢互联网与大鸟们的分享精神!

在C++中怎么调用一个js中的方法

  例如一个test.js内容如下:function main( input ){   return input;}在C++中调用方法如下:// vcJscript.cpp : 定义控制台应用程序的入...
  • sding
  • sding
  • 2010年10月14日 14:12
  • 11156

VC++ 如何执行脚本

1. 导入库 ,该指令一般加在 stdafx.h 中   #import "msscript.ocx" no_namespace 2. 创建脚本对象 //脚本引擎 IScriptControlPtr ...
  • sding
  • sding
  • 2010年11月26日 08:42
  • 3396

ActiveX与JS交互

1.在COM组件中调用JavaScript函数// 连接点方式页面javascript脚本// 事件属性方式页面javascript脚本function onState(s){alert("onSta...
  • sding
  • sding
  • 2010年10月09日 14:34
  • 7750

VC与JavaScript交互(二) ———— 调用JS函数

VC调用无参JS函数 VC调用有参JS函数 VC传递数据给JS函数 JS函数返回一个值给VC JS函数返回多个值给VC...

VC与JavaScript混合编程2

有两种方式可以实现:ATL+IWebBrowser2接口和IDispatch接口+IScriptControl接口。 ATL+IWebBrowser2 一、JavaScript调用VC的函数 1.编写...

VC与JavaScript交互(四) ———— WebBrowser或CHtmlView中轻松屏蔽脚本错误(JavaScript)

1.什么是javascript脚本错误 1.1    概述 JavaScript脚本错误包含“运行时错误”和“语法错误”。 1.2    JavaScript“语法错误” JavaScript...
  • L_Andy
  • L_Andy
  • 2014年10月11日 19:01
  • 4641

如何从 VC WebBrowser 应用程序中调用脚本函数

为了调用脚本函数存在的网页上,您必须使用自动化 ; 换句话说,IDispatch。 使用以下步骤来调用脚本函数从 Visual C++ 应用程序的网页上存在的: 获取在 HTML 文档的 IDispa...
  • jinhill
  • jinhill
  • 2009年07月30日 21:43
  • 2305

C#中让WebBrowser运行Javascript脚本

原文地址: http://blog.unieagle.net/2012/06/21/c%E4%B8%AD%E8%AE%A9webbrowser%E8%BF%90%E8%A1%8Cjavascript%...

VC与JavaScript交互(一) -- 调用JS函数

这一章,我们来动手实践VC调用JS函数。 我们动手写一个HTML,其中包含这样一段JS代码: [html] view plaincopy script type="te...

VC与JavaScript混合编程2

有两种方式可以实现:ATL+IWebBrowser2接口和IDispatch接口+IScriptControl接口。 ATL+IWebBrowser2 一、JavaScript调用VC的函数 1.编写...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中利用webbrowser执行自定义JS函数
举报原因:
原因补充:

(最多只允许输入30个字)