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(“法国”);
}
以上三个方法都是包装的浏览器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!");
}
}