JS里调用C#后台方法如何传参数进去?

JavaScript012

JS里调用C#后台方法如何传参数进去?,第1张

通过webBrowser实现C#和javascript互调

实现步骤:

一、新建一个窗体,加入webBrowser控件

控件名:webBrowser1

二、在窗体后台代码加入如下定义

[System.Runtime.InteropServices.ComVisibleAttribute(true)]

public partial class Form1 : Form

{

...

}

三、加载网页

webBrowser1.Navigate(Application.StartupPath + "/UpDateReport.htm")

webBrowser1.ObjectForScripting = this//这句必须,不然js不能调用C#

四、调用脚本方法

/// <summary>

/// 脚本方法

/// </summary>

/// <param name="tag">JS函数名|参数1|参数2</param>

/// <returns></returns>

private object EXEC_JS(System.Windows.Forms.WebBrowser webBrowser, string tag)

{

string[] args = tag.Split('|')

if (args.Length == 1)

{

return webBrowser.Document.InvokeScript(args[0], null)

}

else

{

object[] objects = new object[args.Length - 1]

Array.Copy(args, 1, objects, 0, objects.Length)

return webBrowser.Document.InvokeScript(args[0], objects)

}

}

五、C#调用脚本方法例子,可以有返回值

//JS方法

<script language="javascript">

function js_fun(args)

{

alert("我是通过js脚本弹出的。你输入的内容是:"+args)

return "JAVASCRIPT"

}

</script>

//C#代码

object returnvalue = EXEC_JS(webBrowser1, "js_fun|参数字符串")

MessageBox.Show("js方法返回值是:" + returnvalue.ToString())

六、JS调用C#方法的例子

//C#方法

public string Test(string args)

{

return "你输入的是:"+args

}

//JS代码

<script language="javascript">

window.onload = function()

{

var CS_returnvalue= window.external.Test("aaa")

alert(CS_returnvalue)

}

</script>

包含api的.h文件,然后直接调用就可以了,比如winsock.h,可以调用recv等函数,也可以在函数前面加::

答案补充

HWND hWnd = ::FindWindow(sClassName, sWindowName)//传入类明到sClassName,窗口名sWindowName,否则传入NULL

脚本执行的基础是WEB控件,

那么C++在WINDOWS下运行可以装入WEB控件实现脚本调用。

下面是一段引用某位博主的代码可以参考一下。

// vcJscript.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#import "C:/windows/system32/msscript.ocx" // msscript.ocx

using namespace MSScriptControl

#include <fstream>

#include <string>

using namespace std

int _tmain(int argc, _TCHAR* argv[])

{

HRESULT hr = CoInitialize(NULL) //使用一个变量初始化COM设置,单线程运行

IScriptControlPtr pScriptControl(__uuidof(ScriptControl))//初始化脚本控件

pScriptControl->Language = "JavaScript"//设置语言

pScriptControl->AllowUI = TRUE//设置显示

fstream file//文件流用于读出JS代码

file.open( "test.js" )

string strFileContent, strTemp

char szTemp[1024]=""

do

{

file.read(szTemp, 1024)

strFileContent.append( szTemp )//拼接JS文件

memset( szTemp, 0, 1024 )

}

while ( !file.fail() )

file.close()

pScriptControl->AddCode(strFileContent.c_str())//向控件加入代码

VARIANT A = pScriptControl->Eval("main(4)")//获取返回值

int iRet = A.intVal

return 0

}