[转]如何从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(
thisnew 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
posted @ 2007-09-19 14:32  Sangplus  阅读(1031)  评论(0编辑  收藏  举报