方法一
使用微软官方组件Interop.MSScriptControl
1.msscript.ocx下载的地址 http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033
或者点击此处下载 Interop.MSScriptControl.dll
2.项目中引用 msscript.ocx 或者 Interop.MSScriptControl.dll
现在通过这个组件的一些方法来执行JS代码,并接收方法执行后的返回值,实现代码如下:
ScriptControlClass sc = new ScriptControlClass(); //申明变量
sc.UseSafeSubset = true; //允许执行不安全的代码
sc.Language = "Javascript"; //表示需要解析的语言为Javascript
sc.AddCode(Properties.Resources.GetTimes); // Properties.Resources 资源文件
string str = sc.Run("time", new object[] { "time()" }).ToString(); //第一个参数为要执行的方法名,第二个参数为方法体的传入参数,特别注意的是当JS方法中没有传入参数时,这时传递的为该方法名称,不填写的话会抛异常。然后将JS方法执行后的返回结果存储在变量str中
以下代码将组件的常用属性以及方法封装成单独的类,方便调用。
using System;
using MSScriptControl;
using System.Text;//导入js文件,导入js 方法字符串,然后执行js方法。 通过msscript.ocx控件执行JS脚本 ,先引用 Interop.MSScriptControl.dll
//官网下载: 然后 引用 xxx.ocx就行了 http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033
namespace csharp中执行js方法
{class script_run{///
JScript,///
Vbscript,///
Javascript}///
}
缺点:
1、必须要添加微软官方组件Interop.MSScriptControl
2、不支持开发x64的程序
方法二
利用反射获取组件(推荐使用)
无需引用其它dll文件,实现代码如下:
///
注意事项:在JS方法中传递的参数如果是字符串,参数需要使用引号括起来,否则不需要。
区别:
1、方法一需要引用dll文件,方法二不需要引用dll文件;
2、方法一不支持开发x64的程序,方法二支持;
3、执行JS方法时,如果传入的参数是字符串时,在方法二中必须要使用引号括起来,否则不需要,而方法一给JS方法传参无需使用括号。
方法三
利用WebBrowser调用空间加密JS直接获取结果
根据参数自己生成html代码,然后交给WebBrowser执行。html文件的代码如下:
DOCTYPE html>
<html>
<script type&#61;"text/Javascript" src&#61;"http://ui.ptlogin2.qzone.com/js/10141/login_10.js">script>
<script type&#61;"text/Javascript" >var result&#61;$.Encryption.getEncryption("bada23","","",!1);document.write(result);
script>
<body>
body>
html>
忽略脚本错误&#xff0c;设置WebBrowser属性&#xff1a;
C#代码如下&#xff1a;
void MainFormLoad(object sender, EventArgs e)
{webBrowser1.DocumentText&#61;File.ReadAllText(&#64;"C:\Users\Administrator\Desktop\abc.html");
}
void Button1Click(object sender, EventArgs e)
{MessageBox.Show(webBrowser1.Document.Body.OuterText);
}
效果如下图所示&#xff1a;
补充
WebBrowser与JS交互&#xff0c;JS调用C#方法
以下补充一下如何使用JS调用C#方法
C#代码&#xff1a;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;namespace test
{ [PermissionSet(SecurityAction.Demand, Name &#61;"FullTrust")][ComVisible(true)]//COM&#43;组件可见public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){webBrowser1.Document.InvokeScript("Run", new object[] { "CShareFunction" });}private void Form1_Load(object sender, EventArgs e){ webBrowser1.ObjectForScripting &#61; this;//具体公开的对象,这里可以公开自定义对象webBrowser1.Navigate(Application.StartupPath &#43; "/dom.html"); }public void ShowMsg(string msg){MessageBox.Show(msg); }}
}
html文件的JS代码&#xff1a;
<html><head>head><body> body> <script type&#61;"text/Javascript" charset&#61;"utf-8">function Run(str){ window.external.ShowMsg(str);}script>
html>
注意的地方&#xff1a;记得给公开对象加上以下标签属性
[PermissionSet(SecurityAction.Demand, Name &#61;"FullTrust")]
[ComVisible(true)]
运行结果&#xff1a;
出处&#xff1a;https://www.cnblogs.com/feiyuhuo/p/5474790.html