{A}
{S0}
简介
我们都看到了微软MSN Messenger活动SDK(好,我有;-)不错的小功能。 MSN提供的SDK,messengeractivitySDK.zip。与此SDK,开发人员创建小应用程序的权力。数据可以很容易地从一个应用程序发送到其他。我看到了一个。然而,这篇文章不是关于实施使者活动SDK。相反,它讨论。NET 2.0框架中的System.Windows.Forms.WebBrowser类的优势,所以你可以创建自己的类似的SDK。背景
现在该怎么做的MSN活动SDK开发使人们有可能为他人创造很好的扩展,如好玩的"井字脚趾"的游戏,他们作为一个例子给的?他们让开发商有一个VBScript和JavaScript之间的选择。其实,他们不给你选择明确的Internet Explorer给你的脚本语言的选择。我个人更喜欢作为一种脚本语言中的JavaScript,所以我会在JavaScript显示这个小的例子。
JavaScript有一个特殊的命名空间称为window.external。这个命名空间扩展的其他应用程序或表达的方式,我永远不会明白,"window.external是一个内置在DOM对象提供用于主机访问。" MSN Messenger使用这个扩展的空间,其他开发人员提供一种手段,使漂亮的Web应用程序可以与宿主应用程序。这一点,结合WebBrowser类被加载的页面能够调用任何方法,可以给你一个强大的方式,让开发人员没有任何危险的安全威胁的扩展。您的应用程序不会受到影响,在这种方式,因为那里的世界已经没有办法进入。与此同时,你所有的力量,使更多或更少的方法和属性提供。使用代码
在演示中,我曾试图保持代码尽可能的干净。我希望你能理解一切。足够的谈论现在,虽然。让我们告诉你一些黄金。 ;-)
首先,你需要与WebBrowser的形式就可以了,当然,以查看网页。我认为你可以处理WebBrowser和基本的HTML页面的形式创造。所以,我们想要做什么?
我们希望从网页中调用一个方法。我们希望从托管应用程序调用一个方法。我们希望得到一个字符串从托管应用程序。我们要设置一个字符串在宿主应用程序从网页。
让我们开始在宿主应用程序从网页调用的方法:private void myCallAMethodButton_Click(object sender, EventArgs e)
{
// You can call any method from the page you loaded...
// I have enclosed this call in a try-catch, because it will
// create a exception when there isn't a page loaded ...
try
{
// If you call a method, you can use a object array to
span>
// supply parameters. My method only has 1 parameter,
// so I give 1 object in the array.
myWebBrowser.Document.InvokeScript("InvokeMethod",
new object[] { "Wow, impressive !" });
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
顺便说一下,你应该检查文件属性。它包含了许多有价值的方法和其他好东西。让我们继续,而我们有精神!首先,让我们的呼吁是在应用程序的方法,而不是在HTML页面中。要调用一个方法是在宿主应用程序,你需要公开的COM类。不要问我为什么,它就是这么。{C}
在这个类中的任何方法或财产将被暴露在脚本通过window.external对象。要查看类的成员,你应该下载源代码。查看这个类不是很多,没有你尚未了解。现在,让我们应用我们刚刚创建的类,WindowExternal,在表单中的WebBrowser对象:public MainForm()
{
InitializeComponent();
// This is it, THE MOST IMPORTANT THING IN YOUR APPLICATION ! :-)
myWebBrowser.ObjectForScripting = new WindowExternal();
}
,您可以指定任何对象ObjectForScripting属性,即使你工作的形式,只要对象是ComVisible!兴趣点
人根本不知道电源的JavaScript。简单地学习语言,你就可以做任何事情,你想在C#或Delphi。现在这是我的小文章结束,我希望你喜欢阅读。历史2006年9月24日, - 这是我的文章和我第一次在CodeProject上的第一个版本,所以还没有一个真正的历史。但你可以肯定会有后续!12月10日,2006年 - 第二十更新。6月22日,2007年 - 文章编辑和移动到主要CodeProject.com文章基地。