C# javascript 交互 互通

cuoguo521 2014-09-26 04:53:21
javascript 调用C#
不能使用webbrowser 因为报错
尝试使用webkit.net 但是只能 C# 调用 javascript 资料少没有查到怎么从javascript 调用C# 而且我只需要实现 C# 和javascript 交互就可以
尝试使用OpenWebkitSharp 一直没有配置成功 而且程序附加的文件较多 我只想实现交互就行不需要这么复杂的东西

希望给位 有好的想法或者好的实现 提供感谢各位
...全文
519 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnowc 2014-10-24
  • 打赏
  • 举报
回复
看你要调用的js是像nodejs那样把js作为独立于浏览器的程序,或者是普通的那样浏览器相关的。(主要区别就是是不是要操作DOM,如果DOM无关,那一般可以在浏览器之外执行) 如果是独立的程序,用https://clearscript.codeplex.com/可以实现你的需求,这个也是微软做的。 如果是和浏览器相关的,那需要集成一个浏览器才能保证正确。WebBrowser最方便集成,不过IE比较呵呵 然后https://github.com/cefsharp/CefSharp可以用来集成Chromium,也就是Chrome的开源版本。这个比openwebsharp要更好。源码里有wpf集成的例子:https://github.com/cefsharp/CefSharp/tree/master/CefSharp.Wpf.Example,也有nuget包:http://www.nuget.org/packages/CefSharp.Wpf/
低姿态微笑 2014-10-24
  • 打赏
  • 举报
回复
引用 24 楼 qq772910047 的回复:
js 中 [code=javascript ]//响应后台事件 function onClickForm(cmd) { window.external.CallWin(cmd); }[/code]

 /// <summary>
        /// WebBrowser与后台交互方法
        /// </summary>
        /// <param name="inStr"></param>
        public void CallWin(string inStr)
        {
MessageBox.show("js调用");
}

我项目里面就是这样用的但是必须放到 WebBrowser 或者写成Activex 插件也可以调用 Activex 具体百度上有
差点忘了 还需要引用 这两个哪一个 忘了 [System.Runtime.InteropServices.ComVisibleAttribute(true)] [DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]
低姿态微笑 2014-10-24
  • 打赏
  • 举报
回复
js 中 [code=javascript ]//响应后台事件 function onClickForm(cmd) { window.external.CallWin(cmd); }[/code]

 /// <summary>
        /// WebBrowser与后台交互方法
        /// </summary>
        /// <param name="inStr"></param>
        public void CallWin(string inStr)
        {
MessageBox.show("js调用");
}

我项目里面就是这样用的但是必须放到 WebBrowser 或者写成Activex 插件也可以调用 Activex 具体百度上有
相思梦 2014-10-23
  • 打赏
  • 举报
回复
C#编写COM组件用于JS在浏览器内进行交互
jetable 2014-10-18
  • 打赏
  • 举报
回复
蛮牛的,不用ajax、服务端语言<%%>,需要原生的js直接调用后台方法,还真的不会
rayyu1989 2014-10-18
  • 打赏
  • 举报
回复
拦截beforenavgate跳转,js将页面跳到指定网址如 about:cSharp.Command 拦截到后cancel,执行指定命令
我叫小菜菜 2014-10-18
  • 打赏
  • 举报
回复
    <script type="text/javascript">

        //第一次展开时,加载子节点
        function nodeLoad(node) {
            Coolite.AjaxMethods.NodeLoad(node.id, {
                success: function (result) {
                    var data = eval("(" + result + ")");
                    node.loadNodes(data);
                },
                failure: function (errorMsg) {
                    Ext.Msg.alert("错误提示", errorMsg);
                }
            });
        }
</script>
        /// <summary>
        /// 展开一个结点时,加载其所有子节点,返回json给前台
        /// </summary>
        /// <param name="nodeID"></param>
        /// <returns></returns>
        [AjaxMethod]
        public string NodeLoad(string nodeID)
        {
            Coolite.Ext.Web.TreeNodeCollection nodes = new Coolite.Ext.Web.TreeNodeCollection();
            if (!string.IsNullOrEmpty(nodeID))
            {
                DataRow[] dr = dtAll.Select("pid='" + nodeID + "'", "gname asc");
                Coolite.Ext.Web.AsyncTreeNode childNode;
                for (int i = 0; i < dr.Length; i++)
                {
                    childNode = new AsyncTreeNode();
                    childNode.NodeID = dr[i]["gid"].ToString();
                    childNode.Text = dr[i]["gname"].ToString();

                    if (dr[i]["typeid"].ToString() == "网格") //是叶子结点
                    {
                        childNode.Checked = ThreeStateBool.False;
                        childNode.AllowChildren = false;
                        childNode.Expandable = ThreeStateBool.False;
                    }
                    else      //是内部结点
                    {
                        childNode.Checked = ThreeStateBool.Undefined;
                        childNode.AllowChildren = true;
                        childNode.Expandable = ThreeStateBool.True;
                    }
                    nodes.Add(childNode);
                }
            }
            return nodes.ToJson();
        }
我叫小菜菜 2014-10-18
  • 打赏
  • 举报
回复
使用AjaxMethod 使用AjaxMethod可以在客户端异步调用服务端方法,简单地说就是在前台JS里调用后台.cs文件里的方法。
emailtome 2014-10-17
  • 打赏
  • 举报
回复
考虑下 Chrome App Launcher 做 C/S
QQ234788028 2014-10-17
  • 打赏
  • 举报
回复
有没有办法把js内容保存下来呢?有,那就有解决方案。
格拉 2014-10-17
  • 打赏
  • 举报
回复
引用 6 楼 cuoguo521 的回复:
[quote=引用 3 楼 u013264700 的回复:] 是否想用c#弄界面,js写逻辑? V8引擎,或者看看有没有C#实现的js引擎。 偷偷告诉你,其实python也很好用,而且有.net的实现,ironpython
非常感谢您的回复 我想用wpf(c/s) javascript 互通 javascript 是其他公司提供的api 关于v8 引擎和python 我之前没了解过 能否再详细点 非常感谢 [/quote]部署个websevrice中转下
  • 打赏
  • 举报
回复
引用 楼主 cuoguo521 的回复:
javascript 调用C# 不能使用webbrowser 因为报错 尝试使用webkit.net 但是只能 C# 调用 javascript 资料少没有查到怎么从javascript 调用C# 而且我只需要实现 C# 和javascript 交互就可以 尝试使用OpenWebkitSharp 一直没有配置成功 而且程序附加的文件较多 我只想实现交互就行不需要这么复杂的东西 希望给位 有好的想法或者好的实现 提供感谢各位
把你的"webbrowser 报错"贴出来。
  • 打赏
  • 举报
回复
v8sharp
卧_槽 2014-09-28
  • 打赏
  • 举报
回复
引用 10 楼 cuoguo521 的回复:
[quote=引用 9 楼 yuwenge 的回复:] http://blog.csdn.net/lyflcear/article/details/10055293
非常感谢您的回复 OpenWebkitSharp 我用没有配置成功 而且引入的文件较多 我只需要实现wpf javascript 互通就行[/quote] 所谓的Javascript与C#互通,意思就是你的应用程序作为浏览器,为javascript提供external方法。 当使用webbrowsers的时候,使用的是com机制,容易实现,几行代码就行了。使用webkit的时候,由于webkit.net并不提供com机制,需要使用webkit所支持的机制,openwebitsharp实现了该内容,你只需要配置好就行了。 除此之外,也可以使用ajax绕过浏览器实现,但是恐怕实现起来的效果和难度比配置一下openwebsharp要难上好多倍。所以不推荐。 还有一种办法,应用程序监控htmldocument变化,出现某一特殊数据时获取信息,执行方法。 后两种都不是正道。 送你一句话:往往那些看起来又苦又难的路,才是真正的捷径。
cuoguo521 2014-09-28
  • 打赏
  • 举报
回复
引用 9 楼 yuwenge 的回复:
http://blog.csdn.net/lyflcear/article/details/10055293
非常感谢您的回复 OpenWebkitSharp 我用没有配置成功 而且引入的文件较多 我只需要实现wpf javascript 互通就行
卧_槽 2014-09-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/lyflcear/article/details/10055293
cuoguo521 2014-09-28
  • 打赏
  • 举报
回复
引用 4 楼 effun 的回复:
WebBrowser可以,而且很方便,如果不能用就太可惜了。
非常感谢您的回复
cuoguo521 2014-09-28
  • 打赏
  • 举报
回复
引用 5 楼 xxhhl_2238677164 的回复:
javascript与C#互相调用与访问示例 //声明C#变量和方法 public string Str = "C# variable";//C#声明的变量 public string GetStr(string str) //C#声明的方法 { return str + Str; } 使用javascript脚步访问C#变量和方法 <script language="javascript" type="text/javascript"> function CallCSVariable() { alert("<%= Str %>"); } function CallCSMethod() { alert('<%= GetStr("this is a ") %>'); } </script> //互相访问的方法 <input id="Hidden1" type="hidden" runat="server" />//声明隐藏字段 //取得或设置隐藏字段的值 <script language="javascript" type="text/javascript"> function SetHidden() { document.getElementById("Hidden1").value = "javascript set value"; } </script> //访问隐藏字段的值 protected void btnCallJavaScript_Click(object sender, EventArgs e) { //必须将Hidden放在Form中 Response.Write(Hidden1.Value); } //创建对象绑定控件 protected void Page_Load(object sender, EventArgs e) { //创建字典对象 Dictionary<string,string> colorDict = new Dictionary<string,string>(); colorDict.Add("red","红色"); //添加字典项 colorDict.Add("blue", "蓝色"); colorDict.Add("green", "绿色"); colorDict.Add("yellow", "黄色"); Repeater1.DataSource = colorDict;//将字典对象绑定到Repeater Repeater1.DataBind(); } //创建字典对象 <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate><table></HeaderTemplate> <ItemTemplate> <tr> <td> <%# Eval("Key") %> </td> <td> <%# Eval("Value") %> </td> </tr> </ItemTemplate> <FooterTemplate></table></FooterTemplate> </asp:Repeater>
非常感谢您的回复 我是用wpf(c/s) 客户端 调用javascript 网上的一些方法我也已经看过了 webbrowser 在调用javascript 的时候会产生错误所以还是放弃采用webbrowser
cuoguo521 2014-09-28
  • 打赏
  • 举报
回复
引用 3 楼 u013264700 的回复:
是否想用c#弄界面,js写逻辑? V8引擎,或者看看有没有C#实现的js引擎。 偷偷告诉你,其实python也很好用,而且有.net的实现,ironpython
非常感谢您的回复 我想用wpf(c/s) javascript 互通 javascript 是其他公司提供的api 关于v8 引擎和python 我之前没了解过 能否再详细点 非常感谢
xxhhl_2238677164 2014-09-28
  • 打赏
  • 举报
回复
javascript与C#互相调用与访问示例 //声明C#变量和方法 public string Str = "C# variable";//C#声明的变量 public string GetStr(string str) //C#声明的方法 { return str + Str; } 使用javascript脚步访问C#变量和方法 <script language="javascript" type="text/javascript"> function CallCSVariable() { alert("<%= Str %>"); } function CallCSMethod() { alert('<%= GetStr("this is a ") %>'); } </script> //互相访问的方法 <input id="Hidden1" type="hidden" runat="server" />//声明隐藏字段 //取得或设置隐藏字段的值 <script language="javascript" type="text/javascript"> function SetHidden() { document.getElementById("Hidden1").value = "javascript set value"; } </script> //访问隐藏字段的值 protected void btnCallJavaScript_Click(object sender, EventArgs e) { //必须将Hidden放在Form中 Response.Write(Hidden1.Value); } //创建对象绑定控件 protected void Page_Load(object sender, EventArgs e) { //创建字典对象 Dictionary<string,string> colorDict = new Dictionary<string,string>(); colorDict.Add("red","红色"); //添加字典项 colorDict.Add("blue", "蓝色"); colorDict.Add("green", "绿色"); colorDict.Add("yellow", "黄色"); Repeater1.DataSource = colorDict;//将字典对象绑定到Repeater Repeater1.DataBind(); } //创建字典对象 <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate><table></HeaderTemplate> <ItemTemplate> <tr> <td> <%# Eval("Key") %> </td> <td> <%# Eval("Value") %> </td> </tr> </ItemTemplate> <FooterTemplate></table></FooterTemplate> </asp:Repeater>
加载更多回复(5)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧