Silverlight 与javaScript互操作

Silverlight 调用 javaScript

主要使用 HtmlPage.Window 这个对象

xaml.cs 

private void button1_Click(object sender, RoutedEventArgs e)
        {
            //使用Invoke
            HtmlPage.Window.Invoke("calljs", "Invoke");
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //创建脚本对象
            ScriptObject calljs =
                (ScriptObject)HtmlPage.Window.GetProperty("calljs");
            //使用InvokeSelf
            calljs.InvokeSelf("InvokeSelf");
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            //JavaScript脚本
            string jsText = @"function calljs(msg){
                        alert(msg);
                    }";
            //创建脚本片段
            HtmlElement element = HtmlPage.Document.CreateElement("Script");
            element.SetAttribute("type", "text/javascript");
            element.SetProperty("text", jsText);
            //添加脚本到Html页面中
            HtmlPage.Document.Body.AppendChild(element);
        }

 

声明创建javaScript  对象的调用方式

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            //JavaScript脚本
            string jsText = @"
                jsObject = function(msg)
                {
                    this.Msg = msg;
                }
                jsObject.prototype.Show = function()
                {
                    alert(this.Msg);
                }";

           //创建脚本对象
            HtmlElement element =  HtmlPage.Document.CreateElement("Script");
            element.SetAttribute("type", "text/javascript");
            element.SetProperty("text", jsText);
            //添加JavaScript到Html页面
            HtmlPage.Document.Body.AppendChild(element);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //使用CreateInstance获取JavaScript对象
            ScriptObject script =  HtmlPage.Window.CreateInstance("jsObject" , textBox1.Text);
            script.Invoke("Show");
        }

使用 HtmlWindow 的 Eval 方法

直接写入javascript 的文本,通过

HtmlPage.Window.Eval(textBox1.Text);

来运行这个命令,比如textBox1.Text = “alert('欢迎!')”

 

javaScript 调用  Silverlight

  在xaml.cs 中先要初始化定义好可以被访问的对象和方法

      public javascript5()
        {
            InitializeComponent();
            //注册JavaScript的访问对象
            HtmlPage.RegisterScriptableObject("Builder", this);
        }

        //定义CreateRect为脚本成员
        [ScriptableMember]
        public void CreateRect(int width, int height)
        {
            //创建一个矩形对象
            Rectangle rect = new Rectangle();
            rect.Width = width;
            rect.Height = height;
            rect.Fill = new SolidColorBrush(Colors.Blue);
            LayoutRoot.Children.Clear();
            LayoutRoot.Children.Add(rect);
        }

然后在js的部分就可以调用了

<script type="text/javascript">
        function createRectangle() {
            //根据object的id来获取Silverlight对象
            var xamlobj = document.all('XamlObject');
            //调用Silverlight中的CreateRect方法
            xamlobj.content.Builder.CreateRect(
            document.all('txtWidth').value
            ,document.all('txtHeight').value);
        }
    </script>

 

示例源自Silverlight 开发实践一书

你可能感兴趣的:(JavaScript,html,脚本,prototype,silverlight)