主要使用 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('欢迎!')”
在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 开发实践一书