[转]如何从C#中调用Javascript代码
越来越多的人问到在Silverlight 1.1 Alpha 应用程序中如何从C#中调用Javascript代码. 这需要综合利用Scriptable和其他相关技术就可以实现。开始创建一个Silverlight项目(在 silverlight.net你可以获取到你需要的相关信息.) 在Page类中, 你需要添加对System.Windows.Browser命名空间的引用 (确保System.Silverlight 已经添加到项目引用中). 添加一个公共的event, 然后添加为类和事件类添加Scriptable属性。 然后在构造函数中注册你的对象,并添加上其他的C#端代码就可以了。
代码如下:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser;
namespace agScriptable
{
[Scriptable]
public partial class Page : Canvas
{
public Page()
{
WebApplication.Current.RegisterScriptableObject("example", this);
MouseLeftButtonDown += Page_MouseLeftButtonDown;
}
void Page_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
if (CallbackToBrowser != null)
{
CallbackToBrowser(this, new EventArgs());
}
}
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
}
[Scriptable]
public event EventHandler CallbackToBrowser;
}
}
你不能够在Loaded事件中触发 CallbackToBrowser 事件,因为Loaded事件太早了,所有需要的初始化还没有完成。
在Javascript代码中,你需要为onLoad事件添加一个全局的处理方法。你也需要添加一个事件处理器,它将在onLoad事件的处理器中注册。代码如下:
// JScript source code
//contains calls to silverlight.js, example below loads Page.xaml
function createSilverlight()
{
Sys.Silverlight.createObjectEx({
source: "Page.xaml",
parentElement: document.getElementById("SilverlightControlHost"),
id: "SilverlightControl",
properties: {
width: "100%",
height: "100%",
version: "0.95",
enableHtmlAccess: true
},
events: {
onLoad: OnLoaded
}
});
}
function OnLoaded(sender, args)
{
sender.Content.example.CallbackToBrowser = onManagedCallback;
}
function onManagedCallback(sender, args)
{
alert("JS!");
}
你不能在createSilverlight()函数中注册事件处理器, 因为这时候Silverlight 控件还没完全初始化完毕。
当完成这些工作后, 在Canvas 点击鼠标左键就会调用 onManagedCallback 这个Javascript 函数.
(感谢Stefan Schackow.)
原文地址:http://blogs.msdn.com/devdave/archive/2007/05/21/calling-javascript-from-c.aspx
日期: 2007年6月12日 1:04 作者: East