c#的winform可以直接调用js函数,得到结果吗?

时间:2022-09-29 14:15:46
  本地磁盘有个js文件,我不想再开webbrowser了,c#中有没有相应的类,可以直接通过调用本地的js文件,来得到函数结果?

17 个解决方案

#1



<script type="text/javascript">
function temp(obj)
{
  document.all["Country"].innerText=obj;
}
</script>



mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)", "javascript");//调用函数temp

#2


winform 调 JS ????


我要学习..

#3


可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了

#4


mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)", "javascript");

#5



   private GoodsInfo()
        {
            System.Net.HttpWebRequest hwr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://imgcache.qq.com/qzone/app/booth/js/goods.js");
            System.IO.StreamReader sr = new System.IO.StreamReader(hwr.GetResponse().GetResponseStream(), Encoding.Default);
            Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
            object o1 = ve.GetOption("fast");
            ve.SetOption("fast", false);
            object o = Microsoft.JScript.Eval.JScriptEvaluate("var commerce_embed=[];" + sr.ReadToEnd() + "(GoodsInfo)", ve);
            for (int i = 0; i < Convert.ToInt32(((Microsoft.JScript.ArrayObject)o).length); i++)
            {
                Microsoft.JScript.JSObject jsobj = (((Microsoft.JScript.ArrayObject)o)[i]) as Microsoft.JScript.JSObject;
                if (jsobj != null && jsobj["name"] != null)
                {
                    GoodInfo _coodInfo = new GoodInfo();
                    _coodInfo.Name = jsobj["name"].ToString();
                    _coodInfo.Money = Convert.ToInt32(jsobj["money"]);
                    _coodInfo.Price = Convert.ToInt32(jsobj["price"]);
                    _coodInfo.Love = Convert.ToInt32(jsobj["love"]);
                    if (!base.ContainsKey(i))
                    {
                        base.Add(i, _coodInfo);
                    }
                }

            }
        }

这是我写软件里的一段代码!
返回一个JS数组

#6


webbrower调用
IHTMLDocument2 doc = (IHTMLDocument2)WebShow.Document;
IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;
win.execScript("A();", "javascript");

webBrowser1.Document.InvokeScript("A",
            new String[] { "" });

#7


加一个webbrower控件,通过浏览器控件执行你的js函数

#8


引用 4 楼 maole413149 的回复:
mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)"……

晕大家都没看到他不要用【我不想再开webbrowser了】吗?

#9


真不知道你们的分是不是混来的

#10


a82344626,能解释下下面这句吗?
GoodInfo _coodInfo = new GoodInfo();
GoodInfo类是在本程序集定义的?对应JS中定义的对象吗?

#11


构造里面实例化自己的写法还没见过。
我试下了,死循环了。

#12


不好意思看错了,代码没有问题。

#13


引用 3 楼 zenghd 的回复:
可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了


http://www.cnblogs.com/cuihongyu3503319/archive/2008/08/28/1278573.html

#14


引用 13 楼 zenghd 的回复:
引用 3 楼 zenghd 的回复:

可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了

学习了,不过JS中返回自定义的函数类型不知道编译后会怎样

#15


lz问题解决了吗?我现在也遇到这个问题了。看了楼上的大侠们的回复,我还是没有思路。

#16


学习了

#17


我也没明白是可以还是不可以?

#1



<script type="text/javascript">
function temp(obj)
{
  document.all["Country"].innerText=obj;
}
</script>



mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)", "javascript");//调用函数temp

#2


winform 调 JS ????


我要学习..

#3


可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了

#4


mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)", "javascript");

#5



   private GoodsInfo()
        {
            System.Net.HttpWebRequest hwr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://imgcache.qq.com/qzone/app/booth/js/goods.js");
            System.IO.StreamReader sr = new System.IO.StreamReader(hwr.GetResponse().GetResponseStream(), Encoding.Default);
            Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
            object o1 = ve.GetOption("fast");
            ve.SetOption("fast", false);
            object o = Microsoft.JScript.Eval.JScriptEvaluate("var commerce_embed=[];" + sr.ReadToEnd() + "(GoodsInfo)", ve);
            for (int i = 0; i < Convert.ToInt32(((Microsoft.JScript.ArrayObject)o).length); i++)
            {
                Microsoft.JScript.JSObject jsobj = (((Microsoft.JScript.ArrayObject)o)[i]) as Microsoft.JScript.JSObject;
                if (jsobj != null && jsobj["name"] != null)
                {
                    GoodInfo _coodInfo = new GoodInfo();
                    _coodInfo.Name = jsobj["name"].ToString();
                    _coodInfo.Money = Convert.ToInt32(jsobj["money"]);
                    _coodInfo.Price = Convert.ToInt32(jsobj["price"]);
                    _coodInfo.Love = Convert.ToInt32(jsobj["love"]);
                    if (!base.ContainsKey(i))
                    {
                        base.Add(i, _coodInfo);
                    }
                }

            }
        }

这是我写软件里的一段代码!
返回一个JS数组

#6


webbrower调用
IHTMLDocument2 doc = (IHTMLDocument2)WebShow.Document;
IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;
win.execScript("A();", "javascript");

webBrowser1.Document.InvokeScript("A",
            new String[] { "" });

#7


加一个webbrower控件,通过浏览器控件执行你的js函数

#8


引用 4 楼 maole413149 的回复:
mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2) webBrowser1.Document.DomDocument;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
win.execScript("temp('fdsafadsf)"……

晕大家都没看到他不要用【我不想再开webbrowser了】吗?

#9


真不知道你们的分是不是混来的

#10


a82344626,能解释下下面这句吗?
GoodInfo _coodInfo = new GoodInfo();
GoodInfo类是在本程序集定义的?对应JS中定义的对象吗?

#11


构造里面实例化自己的写法还没见过。
我试下了,死循环了。

#12


不好意思看错了,代码没有问题。

#13


引用 3 楼 zenghd 的回复:
可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了


http://www.cnblogs.com/cuihongyu3503319/archive/2008/08/28/1278573.html

#14


引用 13 楼 zenghd 的回复:
引用 3 楼 zenghd 的回复:

可以的,你把这个js文件文件编译成DLL,然后在C#引用再直接调用方法就行了

学习了,不过JS中返回自定义的函数类型不知道编译后会怎样

#15


lz问题解决了吗?我现在也遇到这个问题了。看了楼上的大侠们的回复,我还是没有思路。

#16


学习了

#17


我也没明白是可以还是不可以?