JavaScript 与 Silverlight 的调用

本文介绍JavaScript调用Silverlight及反之的方法,包括JS调用Silverlight函数、Silverlight调用JS函数、创建JS对象实例、执行字符串代码及使用Alert等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、JavaScript 调用 Silverlight  的函数

 

JS代码:

 function LoadData() {                       document.getElementById("xap").content.Page.LoadData("BookinfoInfo");
}

html代码:

  <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"  id="xap" width="100%" height="100%">

Xmal代码:添加引用(using System.Windows.Browser;) 

 

 //这里必须声明是public,否则js调用该方法时会报错
    [ScriptableMember]     

public void LoadData(string  doc)
        {
            //具体操作Silverlight 代码
            GetFileDir("Images");
        }

 

2、Silverlight   调用 JavaScript的函数

XAML:

 
<Grid Background="DarkGreen" ShowGridLines="True"> 
    <Button x:Name="sayHello" Content="Hello World!" 
            Click="Hello_Click"></Button> 
</Grid>
 


C#:

private void Hello_Click(object sender, RoutedEventArgs e) 
{ 
    ScriptObject so = HtmlPage.Window.GetProperty("Hello") as ScriptObject;   
    so.InvokeSelf(); 
}

HtmlWindow的CreateInstance()方法

其作用是创建Javascript对象的实例。

示例:
Javascript: 

 

<script type="text/javascript"> var Hello = function(yourName) {     this.YourName = yourName; } Hello.prototype.Alert = function() {     alert("Hello " + this.YourName); }     </script>

 

 

XAML:

 

<StackPanel Background="DarkGreen">   
  <TextBox x:Name="txtYourName" Width="400" Margin="0,30,0,30">
</TextBox>    
 <Button x:Name="btnTest" Content="Test CreateInstance"             Width="200" Click="btnTest_Click">
</Button> 
</StackPanel> 

 

C#:
 

private void btnTest_Click(object sender, RoutedEventArgs e) {     ScriptObject so = HtmlPage.Window.CreateInstance("Hello", txtYourName.Text);     so.Invoke("多福多寿"); }
 

 



 

HtmlWindow的Eval()方法  

Javascript的Eval()函数有时候非常好用,这里HtmlWindow的Eval()方法也具有将字符串转化为可执行代码的功能。
示例:
XAML:

 
<StackPanel Background="DarkGreen"> 
    <TextBox x:Name="txtScript" Width="400" 
             Margin="0,30,0,30"></TextBox> 
    <Button x:Name="btnEval" Content="Test Eval()" 
            Width="100" Click="Eval_Click"></Button> 
</StackPanel>
 

C#:
 
private void Eval_Click(object sender, RoutedEventArgs e) 
{ 
    HtmlPage.Window.Eval(“法国”); 
}
 


HtmlWindow的Alert()、Confirm()、Prompt()方法

 

以上三个方法都是包装的浏览器Javascript函数,如HtmlWindow.Confirm()方法源码为:

 
public bool Confirm(string confirmText) 
{ 
    HtmlPage.VerifyThread(); 
    if (confirmText == null) 
    { 
        confirmText = string.Empty; 
    } 
    return (bool) this.Invoke("confirm", new object[] { confirmText }); 
}
 

示例:
XAML:
 
<Grid Background="DarkGreen">         
    <Button x:Name="Test" Content="Test Alert、Confirm、Prompt" 
            Click="Test_Click"></Button> 
</Grid>
 

C#:
 
private void Test_Click(object sender, RoutedEventArgs e) 
{ 
    var str = HtmlPage.Window.Prompt("Please in put your blog:"); 
 
    var confirm = HtmlPage.Window.Confirm("Your blog is:\"" + str + "\",are you sure?"); 
    if (confirm) 
    { 
        HtmlPage.Window.Alert("OK! Your blog is:\"" + str + "\""); 
    } 
    else 
    { 
        HtmlPage.Window.Alert("I'm sorry, you input a wrong blog!"); 
    } 
}





转载于:https://www.cnblogs.com/l2010q2010/archive/2010/08/17/1801380.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值