【问题标题】:WPF Webbrowser with javascript use variable defined in c#?带有javascript的WPF Webbrowser使用c#中定义的变量?
【发布时间】:2017-07-26 00:18:17
【问题描述】:

我正在尝试将我的 wpf 项目中定义的数组传递给 Webbrowser 控件中加载的 html 页面内的 javascript 函数,但我找不到任何方法。

我想做的例子:

Xaml:

<WebBrowser x:Name="WBTimeGraph" /> 

c#:

namespace GraphNameSpace
{
    public partial class TimeGraph : Window
    {
        // MEMBERS
        public []int MyArrayOfData = new int[50];
        // METHODS
        public TimeGraph ()
        {
             InitializeComponent();

              string Dir = Environment.CurrentDirectory;
              Uri tNav = new Uri(Dir + string.Format("/TimeGraph.html"));
              WBTimeGraph.Navigate(tNav);
        }
    }
}

HTML:

     <script>
        $(function () {
          // Do a Graph with MyArrayOfData
        });
     </script>

【问题讨论】:

  • 您不能调用返回上述值的方法?
  • 我不想调用方法,我只需要在javascript函数中使用“ValueThaWillBeUsesByTheJavascriptFunction”
  • 您可以在指定 TimeGraph.html 时在查询字符串中传递数据,如果它不是太大的话。否则我会创建 HTML 文件的副本,注入数据,然后打开它。
  • 谢谢丹,好主意:)

标签: javascript c# html wpf webbrowser-control


【解决方案1】:

我找到的最简单的解决方案是调用带有参数的 javascript 函数来更新我的图形并将序列化数组作为参数传递

HTML:

 <script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
 <script type="text/javascript">
    function UpdateGraph(json) {

        var data = JSON.parse(json);
        //  Update My Graph with new data
        // This allow me to use data like the serialised array - data[0] ...

     }
 </script>

C#:

在 référence 中添加 System.Web.Extension 以进行脚本序列化

 private void UpdateValueInJavascriptGraph()
 {
     var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
     var json = serializer.Serialize(MyArrayOfData);  
     object result = this.WBTimeGraph.InvokeScript("UpdateGraph", new object[] { json });
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多