大家是在用C#呢还是js

C# ActiveX调用JS函数的便捷方法与思路
AcitecX虽然是一个古老而经典的应用技术,但在技术变革日新月异的今天仍然是那么的实用。缺了它又找不出更适合的技术来代替它。
这不,最近公司某产品的一个应用场景中,它又被我拉出来操练了一把。
接着难题来了,以前都是JS调用ActiveX中的函数,从没在ActiveX中调用过JS。
后来到google上一搜& activex 调用js&,找到了一个调用方法。
由于该方法,可通过我提供的关键字搜索获得,就不再详细描述。方法中的关键步骤如下:
1,声明 IOleClientSite 和 IOleContainer 两个接口。
2,通过一系列的转换,获得 IHTMLDocument 和 IHTMLWindow2 。
3,调用JS函数。
该方法是一个稳扎稳打的方法,值得大家学习。在理解了该方法后,我总结了一下其关键点就是获得IHTMLWindow2。
本人是一个懒惰虫,在了解其关键点后,将其方法做了精简,在此与大家分享。废话不多说,上代码。
1,通过JS将IHTMLWindow2直接传入,省去一大堆声明与转换代码。直接切入重点。
2,调用语法采用JS语法,方便书写与理解。
&js代码如下
[javascript]
&script type=&text/javascript&&
activexObj.SetFunc(window, &func&);//activexObj为activex对象,&func&是JS函数名。通过参数传递函数名,可以令代码更加灵活。&
function func(value) {&
& alert(value);&
&/script&&
&C#代码如下
注意:项目必须引用Microsoft.mshtml。
public void SetFunc(object win, string func)&
&& IHTMLWindow2 htmlWin = (win as IHTMLWindow2);&
&& if (htmlWin == null || string.IsNullOrEmpty(func))&
&&&&& MessageBox.Show(&赋值错误。&);&
&&&& //以下是调用方法,由于仅仅是示例,所以直接放在SetFunc方法中了。实际开发中,大家根据情况放到相应地方。&
&&&&& //这里调用的方法我提供了两种:1,反射的方法;2,JS代码语法。&
&&&&& //大家可以根据自己熟悉的情况采用适合自己的方法。两种方法的效果都是一样的。&
&&&&& //方法1。&
&&&&& htmlWin.GetType().InvokeMember(func,&
&&&&&&&& BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,&
&&&&&&&& null, htmlWin, new object[] { &参数& });&
&&&& //方法2。&
&&&&& string jsCode = string.Format(&{0}('{1}')&, func, &参数&);&
&&&&& htmlWin.execScript(jsCode, &jscript&);&
摘自 Sank Orange的专栏  请注意,我这段代码中实现js方法中有 funcName(argument) 这种一个入参的调用。
namespace game2_36.Common
public class JSHELP
//string _MD5_js = "MD5.js";
private object ExecuteScript(string funcName, string argument, string jsPath)
string js = System.IO.File.ReadAllText(jsPath);
object o = ExecuteScript(string.Format("{0}('{1}')", funcName, argument), js);
/// &summary&
/// 执行JS
/// &/summary&
/// &param name="sExpression"&参数体&/param&
/// &param name="sCode"&JavaScript代码的字符串&/param&
/// &returns&&/returns&
private object ExecuteScript(string sExpression, string sCode)
MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();
scriptControl.UseSafeSubset = true;
scriptControl.Language = "JScript";
scriptControl.AddCode(sCode);
return scriptControl.Eval(sExpression);
catch (Exception ex)
return null;
阅读(...) 评论()百度--您的访问出错了
&您的访问出错了
很抱歉,您要访问的页面不存在。
请检查您输入的网址是否正确。
如果您不能确认您输入的网址,请浏览页面,来查看您所要访问的网址。
直接输入要访问的内容进行搜索:
如还有疑问请访问获得解决方法
&2013 Baidu如何在C#程序中压缩js文件_百度知道
如何在C#程序中压缩js文件
我有更好的答案
所谓“找了很多资料外事实上,或者是一个组件自动全部压缩”,这说明你也应该可以编程调用这些命令行或者组件的东西。压缩 js 文件的方法有很多种。关键是并行执行,而不要顺序执行(包括调用服务器上本地的命令行的程序也不得不如此)。这样去编程才能真正解决性能问题,很多都是用命令行进行压缩的
采纳率:98%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 如何用js 的文章

 

随机推荐