Silverlight与JavaScript的互相调用

Silverlight与JavaScript的互相调用

1.在Silverlight中调用JavaScript

 

1.1.      设置调用页面

head中添加js脚本

    <!--方法1中用到-->

    <script type="text/javascript">

        function Hello(message) {

            alert('Hello:' + message);

        }

    </script>

 

    <!--方法2中用到-->

    <script type="text/javascript">

        myHello = function(message) {

            this.Message = message;

        }

        myHello.prototype.Display = function() {

            alert('Hello:' + this.Message);

        }

    </script>

 

 

Form中添加dom元素

<div id="result">

        <a style=" color:Blue">链接</a>

</div>

 

 

1.2.       设置Silverlight页面

前台代码:

     <StackPanel Orientation="Horizontal">

                <TextBox x:Name="input" Width="340" Height="40" Margin="20 0 20 0"></TextBox>

                <Button x:Name="submit1" Width="120" Height="40" Background="Red"

            Content="方法1" FontSize="20" Foreground="Red" Click="submit1_Click"></Button>

                <Button x:Name="submit2" Width="120" Height="40" Background="Red"

            Content="方法2" FontSize="20" Foreground="Red" Click="submit2_Click"></Button>

                <Button x:Name="submit3" Width="120" Height="40" Background="Red"

            Content="方法3" FontSize="20" Foreground="Red" Click="submit3_Click"></Button>

                <Button x:Name="submit4" Width="120" Height="40" Background="Red"

            Content="方法3的应用" FontSize="20" Foreground="Red" Click="submit4_Click"></Button>

            </StackPanel>

 

后台代码:

private void submit1_Click(object sender, RoutedEventArgs e)

        {

            //方法1:使用InvokeSelf调用脚本对象的自身

            ScriptObject hello = HtmlPage.Window.GetProperty("Hello") as ScriptObject;

            hello.InvokeSelf(this.input.Text);

 

        }

        private void submit2_Click(object sender, RoutedEventArgs e)

        {

            //方法2:使用Invoke传入名称进行调用

            ScriptObject script = HtmlPage.Window.CreateInstance("myHello", this.input.Text);

            object result = script.Invoke("Display");

 

        }

        private void submit3_Click(object sender, RoutedEventArgs e)

        {

            //方法3:给该方法传入一段字符串,它都会作为JavaScript来执行 如:HtmlPage.Window.Eval("alert('ddddd')")

            HtmlPage.Window.Eval(this.input.Text);

        }

 

        private void submit4_Click(object sender, RoutedEventArgs e)

        {

            //方法3的应用:使用HtmlPage.Window.Eval 来取html元素

            HtmlElement result = HtmlPage.Window.Eval("document.getElementById('result')") as HtmlElement;

            string message = result.GetAttribute("innerHTML");

            HtmlPage.Window.Alert(message);

 

        }

 

2.JavaScript中调用Silverlight中的.net代码

 

2.1.       新建SilverLight页面,

注意:需要 Silverlight中公开相关方法供JavaScript调用

前台代码:

<StackPanel Background="#CDFCAE" Orientation="Horizontal">

            <Border CornerRadius="10" Width="100" Height="40" Margin="50 10 0 0">

                <TextBlock Text="结果显示:" FontSize="20" Foreground="Red"></TextBlock>

            </Border>

            <Border CornerRadius="10" Background="Green" Width="300" Height="40">

                <TextBlock x:Name="result" FontSize="20" Foreground="White"

                   Margin="20 5 0 0"></TextBlock>

            </Border>

        </StackPanel>

后台代码:

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

            Loaded+=new RoutedEventHandler(MainPage_Loaded);

        }

 

        private void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            //示例1:调用当前类中的某个方法

           // HtmlPage.RegisterScriptableObject("Calculator", this);

 

            //示例2:调用silverLight中其它类的某个方法

            HtmlPage.RegisterCreateableType("calculator", typeof(Calculator));

        }

 

        //供示例1调用

        //[ScriptableMember]

        //public void Add(int x, int y)

        //{

        //    int z = x + y;

        //    this.result.Text = String.Format("{0} + {1} = {2}", x, y, z);

        //}

    }

 

 

    //供示例2调用

    [ScriptableType]

    public class Calculator

    {

        [ScriptableMember]

        public int Add(int x, int y)

        {

            return x + y;

        }

}

 

2.2.      调用

head中添加js脚本

   <script type="text/javascript">

        //供示例1调用

        function callSilverlight1() {

            var slPlugin = document.getElementById('Xaml1');

            slPlugin.content.Calculator.Add(document.getElementById('txt1').value, document.getElementById('txt2').value);

 

        }

    </script>

 

    <script type="text/javascript">

        //供示例2调用

        function callSilverlight2() {

            var slPlugin = document.getElementById('Xaml1');

            var cal = slPlugin.content.services.createObject("calculator");

 

            alert(cal.Add(document.getElementById('txt1').value, document.getElementById('txt2').value));

 

        }

</script>

 

Form中添加代码:

<div class="main">

        <input id="txt1" type="text" />

        <input id="txt2" type="text" />

        <input id="Button1" type="button" value="调用(方法2)" onclick="callSilverlight2()" />

    </div>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值