Silverlight与浏览器通信技术总结2:Silverlight与JavaScript互访

上一节( http://www.cnblogs.com/erichan/archive/2010/05/18/1737862.html)总结了Silverlight访问HTML DOM的技术,这一节来讨论JavaScript。我们可以在Silverlight中调用JavaScript,也可以在JavaScript中访问Silverlight。
 
在Silverlight中调用JavaScript

 在Silverlight中调用JavaScript函数很简单,你可以用HtmlPage.Window 对象来调用你的JavaScript函数。HtmlPage.Window 对象类型为HtmlWindow,通过它可以与浏览器窗口进行交互。通过调用该对象的Invoke()方法,我们可以调用JavaScript函数。例如:

 

 

Silverght:

private void Button_Click(object sender, RoutedEventArgs e)
{
      HtmlPage.Window.Invoke("showMessage", "Hello!");
}

JavaScript:

function showMessage(message) {
    alert(message);
}
 
 
在JavaScript中访问Silverlight

在JavaScript中访问Silverlight也很简单。为了使你的Silverlight程序可以被JavaScript访问,需要如下操作:

 

  • 在构造函数(constructor )中调用RegisterScriptableObject()函数。该函数包含两个参数:name和object。
  • 只能调用Silverlight公共函数,同时在函数定义前需要添加ScriptableMember属性。

  

例子如下:

Silverlight:

public partial class Page : UserControl
{
    public Page()
    {
        InitializeComponent();
        HtmlPage.RegisterScriptableObject("Page", this);
    }
 
    [ScriptableMember]
    public void Start()
    {
        // do something
    }
 
    [ScriptableMember]
    public void Stop()
    {
        // do something
    }
}

 

JavaScript:

 

  < script type = " text/javascript "  language = " javascript " >
      
var  slcontrol  =   null ;

      
function  pluginLoaded(sender, args) {    
          
if  (sender  !=   null   &&  sender  !=   0 ) {
              slcontrol 
=  sender.getHost();
          }
      }
      
function  startit() {
          
if  (slcontrol) {
              slcontrol.Content.Page.Start();
          }
      }
      
function  stopit() {
          
if  (slcontrol) {
              slcontrol.Content.Page.Stop();
          }
      }
  
< / script>

 

 

 

在线演示:http://rpg.yingyuantown.com/JavaScriptToSilverlightTestPage.html

 

调试JavaScript小技巧

不知你是否注意过,在Visual Studio中,JavaScript调试有时不工作。例如上面的代码,如果在pluginLoaded函数中设置断点,明明该函数被执行了,却发现怎么也无法停在断点处。究竟是什么原因?答案很简单:原来Silverlight不能和JavaScript同时调试!?不知道微软故意这样设计,还是一个Visual Studio的Bug,反正是让开发者很不爽。

 

解决办法:当需要调试JavaScript时,请关闭Silverlight调试。如下图所示。

 

r_jsdebug.JPG

  

 

本节的源代码请在这里下载

 

参考:

JavaScript Integration and the HTML Bridge (http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx)

转载于:https://www.cnblogs.com/erichan/archive/2010/05/20/1739722.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值