📜  Silverlight-浏览器集成

📅  最后修改于: 2020-11-19 08:34:19             🧑  作者: Mango


在本章中,我们将使用浏览器集成支持来了解Silverlight应用程序如何与网页一起使用。

我们可以通过以下两种方式探索Silverlight与浏览器的集成-

  • 在浏览器中运行的JavaScript代码可以访问Silverlight应用程序中的功能。

  • Silverlight能够为对象提供JavaScript包装器。在Silverlight插件中运行的.NET代码可以访问HTML DOM和其他浏览器脚本功能,因为JavaScript对象具有Silverlight .NET包装器。

我们将看到基于浏览器的软件应用程序如何将信息持久存储在客户端上。

Silverlight和HTML

就HTML世界而言,Silverlight内容只是一个元素。这对于布局是正确的。整个Silverlight插件及其所有内容看起来都只是一个对象元素。

您必须记住-

  • Silverlight并不是HTML的替代品,它是对HTML的补充。因此,仅访问DOM中另一个元素的能力很重要。

  • 它使您可以在适当的地方使用Silverlight。

  • 在主要使用HTML的页面上,Silverlight与浏览器世界的集成不仅限于作为DOM元素存在,还受常规HTML布局的限制。

访问DOM

Silverlight内容必须能够完全参与网页。因此,它应该能够访问HTML DOM。 Silverlight提供了将浏览器脚本对象包装为Dot Net对象(系统中的Script对象类)的桥对象。浏览器名称空间提供的方法可让您读取和写入属性,并在浏览器脚本对象上投入功能。

首先,您需要一种获取Script对象的方法。 Silverlight提供了HTML页面类,使您可以访问功能的各个页面,例如Script对象。

让我们看一个简单的示例,在该示例中,我们有一个简单的脚本来创建具有一些属性的对象。其中一些只是值,而其中一些是函数。


下面给出的是其中添加了按钮的XAML代码。

 
   
    
       
   
    

这是单击按钮的实现,其中调用了一个在HTML文件中创建的脚本。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes;
using System.Windows.Browser; 

using System.Diagnostics; 
 
namespace DomAccess { 

   public partial class Page : UserControl { 
    
      public Page() { 
         InitializeComponent(); 
      } 
   
      private void useDomButton_Click(object sender, RoutedEventArgs e) { 
         ScriptObject myJsObject = HtmlPage.Window.GetProperty("myJsObject") as ScriptObject;  
         string[] propertyNames = { "answer", "message", "modifyHeading", 
            "performReallyComplexCalculation" }; 
                
         foreach (string propertyName in propertyNames) { 
            object value = myJsObject.GetProperty(propertyName); 
            Debug.WriteLine("{0}: {1} ({2})", propertyName, value, value.GetType()); 
         }
            
         object result = myJsObject.Invoke("performReallyComplexCalculation", 11, 31);  
         HtmlElement h1 = HtmlPage.Document.GetElementById("heading"); 
         h1.SetProperty("innerHTML", "Text from C# (without JavaScript's help)"); 
         h1.SetStyleAttribute("height", "200px"); 
      } 
   } 
} 

以下是完整的HTML文件。

 
    
    
      DomAccess  
        
       
     
      
        
       
        
       
        
     
    
    
    
      
            
      

编译并执行上述代码后,您将在输出窗口中看到所有值,这些值是从HTML文件中提取的。

访问DOM