JavaScript 与 Silverlight 的调用
时间:2010-08-17 来源:l2010q2010
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!"); } }