首页  ·  知识 ·  移动开发
如何从C#中调用Javascript代码
佚名  http://silverlight.cn/  Wphone  编辑:dezai  图片来源:网络
越来越多的人问到在Silverlight 1.1 Alpha 应用程序中如何从C#中调用javascript代码. 这需要综合利用Scriptable和其他相关技术就可以实现。 开始创建
越来越多的人问到在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

本文作者:佚名 来源:http://silverlight.cn/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读