解决方案 »

  1.   

    C#和 javascript是两种编程语言,什么叫两种语言如何相互调用啊?
    中文如何调用英文,你给我说说?
    只有C#和 javascript编程的程序间才存在调用一说.
    而你又不说是什么程序.
    是调用dll,是web页面前台后台互相调用,还是什么.
      

  2.   


    wpf 程序 调用 js 函数
      

  3.   

    是否想用c#弄界面,js写逻辑?
    V8引擎,或者看看有没有C#实现的js引擎。偷偷告诉你,其实python也很好用,而且有.net的实现,ironpython
      

  4.   

    WebBrowser可以,而且很方便,如果不能用就太可惜了。
      

  5.   

    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>
      

  6.   


    非常感谢您的回复 我想用wpf(c/s) javascript  互通  
    javascript 是其他公司提供的api 
    关于v8 引擎和python 我之前没了解过 能否再详细点 非常感谢
      

  7.   


    非常感谢您的回复 我是用wpf(c/s) 客户端 调用javascript  网上的一些方法我也已经看过了 
    webbrowser 在调用javascript 的时候会产生错误所以还是放弃采用webbrowser 
      

  8.   

    http://blog.csdn.net/lyflcear/article/details/10055293
      

  9.   


    非常感谢您的回复 
    OpenWebkitSharp 我用没有配置成功 而且引入的文件较多 我只需要实现wpf javascript 互通就行
      

  10.   


    非常感谢您的回复 
    OpenWebkitSharp 我用没有配置成功 而且引入的文件较多 我只需要实现wpf javascript 互通就行
    所谓的Javascript与C#互通,意思就是你的应用程序作为浏览器,为javascript提供external方法。当使用webbrowsers的时候,使用的是com机制,容易实现,几行代码就行了。使用webkit的时候,由于webkit.net并不提供com机制,需要使用webkit所支持的机制,openwebitsharp实现了该内容,你只需要配置好就行了。除此之外,也可以使用ajax绕过浏览器实现,但是恐怕实现起来的效果和难度比配置一下openwebsharp要难上好多倍。所以不推荐。还有一种办法,应用程序监控htmldocument变化,出现某一特殊数据时获取信息,执行方法。后两种都不是正道。送你一句话:往往那些看起来又苦又难的路,才是真正的捷径。
      

  11.   


    非常感谢您的回复 
    OpenWebkitSharp 我用没有配置成功 而且引入的文件较多 我只需要实现wpf javascript 互通就行
    所谓的Javascript与C#互通,意思就是你的应用程序作为浏览器,为javascript提供external方法。当使用webbrowsers的时候,使用的是com机制,容易实现,几行代码就行了。使用webkit的时候,由于webkit.net并不提供com机制,需要使用webkit所支持的机制,openwebitsharp实现了该内容,你只需要配置好就行了。除此之外,也可以使用ajax绕过浏览器实现,但是恐怕实现起来的效果和难度比配置一下openwebsharp要难上好多倍。所以不推荐。还有一种办法,应用程序监控htmldocument变化,出现某一特殊数据时获取信息,执行方法。后两种都不是正道。送你一句话:往往那些看起来又苦又难的路,才是真正的捷径。
    谢谢大侠  送的话也很不错  我还是配置 openwebsharp 吧
      

  12.   


    把你的"webbrowser 报错"贴出来。
      

  13.   


    非常感谢您的回复 我想用wpf(c/s) javascript  互通  
    javascript 是其他公司提供的api 
    关于v8 引擎和python 我之前没了解过 能否再详细点 非常感谢
    部署个websevrice中转下
      

  14.   

    考虑下 Chrome App Launcher  做  C/S 
      

  15.   

    使用AjaxMethod
    使用AjaxMethod可以在客户端异步调用服务端方法,简单地说就是在前台JS里调用后台.cs文件里的方法。
      

  16.   

        <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();
            }
      

  17.   

    拦截beforenavgate跳转,js将页面跳到指定网址如 about:cSharp.Command   拦截到后cancel,执行指定命令
      

  18.   

    蛮牛的,不用ajax、服务端语言<%%>,需要原生的js直接调用后台方法,还真的不会
      

  19.   


    C#编写COM组件用于JS在浏览器内进行交互
      

  20.   

    看你要调用的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/
      

  21.   

    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 具体百度上有
      

  22.   

    差点忘了
    还需要引用  这两个哪一个 忘了
     [System.Runtime.InteropServices.ComVisibleAttribute(true)][DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]