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 ;

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

MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

----------------------------------------------------------------------------------------------------...
  • to_Baidu
  • to_Baidu
  • 2017年04月29日 23:59
  • 1765

delphi执行webbrowser中的js

procedure TForm1.btn1Click(Sender: TObject); var doc:olevariant; str:string; begin doc:=wb1....
  • hutao1101175783
  • hutao1101175783
  • 2015年01月08日 21:03
  • 2988

C# WebBrowser执行自定义JS方法

/// /// 执行自定义JS函数 /// /// 要操作的WebBrowser的页面对象 /// 自定义JS函数 ...
  • cjd6568358
  • cjd6568358
  • 2014年05月22日 14:01
  • 1048

.NET webBrowser 与 html js脚本之间的数据互传及函数调用

1:.NET 向 JS程序传递数据 可以直接调用
  • okkk
  • okkk
  • 2014年10月22日 16:17
  • 6278

VC中调用WebBrowser简单的实现过程(图解过程)

首先我们打开VC开发环境,如下图然后我们开始新建一个工程,点击"文件"菜单的"新建"项然后我们在“工程”选择卡中选择“MFC AppWizard(exe)”项,并且选择设置好工程存放的位置和工程名称然...
  • supermanking
  • supermanking
  • 2010年09月06日 14:12
  • 15908

c#操作webbrowser中网页的iframe页面的javascript函数和触发控件事件或者直接运行js函数

1. 操作webbrowser中网页的iframe页面的javascript函数和触发控件事件  HTMLIFrame fe = webBrowser1.Document.GetElementByI...
  • xiao_rory
  • xiao_rory
  • 2012年10月11日 11:18
  • 6321

VC中调用WebBrowser简单的实现过程

VC中调用WebBrowser简单的实现过程http://blog.csdn.net/supermanking/article/details/5866213 对VC的一些提示感觉不解,如: Can...
  • u013675958
  • u013675958
  • 2014年03月09日 16:28
  • 841

MFC webBrowser 禁止加载图片、背景声音、ActiveX 等

//重载Web控件所在窗体的方法“OnAmbientProperty” //[说明]此函数为主窗体方法重载,能够屏蔽打开网页的全部脚本执行及弹窗,故要慎用. //DISPID_AMBIENT_DLC...
  • ctkqqq
  • ctkqqq
  • 2017年06月10日 22:16
  • 211

CppWebBrowser的使用一 自动点击网页上的超级链接

C Builder 5.0以后 CppWebBrowser组件代替了原来的HTML组件 实际上 这个组件封装了Windows的Shell Doc Object和控制库(SHDOCVW.DLL) 中的I...
  • tonnyli
  • tonnyli
  • 2012年02月01日 16:19
  • 1092

WinForm下的开发WebBrowser,js函数与Winform函数互调

WinForm下的开发WebBrowser,js函数与Winform函数互调 想在窗体下实现浏览器的效果,那使用WebBrowser吧,微软的控件,使用起来效果还可以。这样方便用户使用,...
  • a479898045
  • a479898045
  • 2012年11月21日 14:41
  • 862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中利用webbrowser执行自定义JS函数
举报原因:
原因补充:

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