快速浏览Silverlight3:在浏览器外运行Silverlight应用

简介:

  Silverlight3一个很显著的特点就是其应用可以在浏览器外运行。就是说一个在浏览器中运行的应用可以被独立(detached)出来,并通过一个桌面和开始菜单栏图标来启动执行,不在需要有网络连接。这样给人的感觉其就像一个普通的桌面应用而不是一个浏览器应用程序。 

    为了实现独立(detached),用户必须对这类应用有个明确的选择:“该应用在没有用户通知的情况下是不可以detached它自己的。下面用一个例子“Hello World”来展示一下:

< UserControl  x:Class ="SilverlightApplication1.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
    xmlns:x="
[url]http://schemas.microsoft.com/winfx/2006/xaml%22[/url]
    Width
="400"  Height ="300" >
    
< StackPanel  x:Name ="LayoutRoot"  Background ="White" >
        
< TextBlock
            
x:Name ="txtStatus"  Text ="Not Set"  HorizontalAlignment ="Center"  Margin ="10"   />
        
< Button
            
Content ="Click Me"
            Click
="OnClicked"
            Margin
="10" />
    
</ StackPanel >
</ UserControl >
 

     还有一些代码:
public   partial   class  MainPage : UserControl
{
    
public  MainPage()
    {
      InitializeComponent();
      OnExecutionStateChanged(
null null );
      App.Current.ExecutionStateChanged 
+=  OnExecutionStateChanged;
    }
    
void  OnExecutionStateChanged( object  sender, EventArgs e)
    {
      txtStatus.Text 
=  App.Current.ExecutionState.ToString();
    }
    
void  OnClicked( object  sender, RoutedEventArgs args)
    {
      App.Current.Detach();
    }
}

    然后我们在浏览器中运行它并看到一个新的鼠标右击菜单:
    其允许将该应用独立出来并安装到本地。并且你会注意到,该菜单项是灰色的。
    同样地,我们可以在按钮事件中加入一些代码并尝试分离这个应用。

void  OnClicked( object  sender, RoutedEventArgs args)
{
      App.Current.Detach();
}
  
    但它并没有启作用,因为右键菜单依旧是灰的.原因在于这个应用没有相应的元数据支持。
    为了提供元数据,我们要编辑一下 appmanifest.xml 文件:

< Deployment  xmlns ="http://schemas.microsoft.com/client/2007/deployment"
            xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
  
< Deployment.Parts >
  
</ Deployment.Parts >
  
< Deployment.ApplicationIdentity >
    
< ApplicationIdentity
      
ShortName ="Mike's Silverlight App"
      Title
="Mike's App Window" >
      
< ApplicationIdentity.Blurb > Mikes Application Blurb </ ApplicationIdentity.Blurb >
      
< ApplicationIdentity.Icons >
        
< Icon  Size ="16x16" > icons/16x16.png </ Icon >
        
< Icon  Size ="32x32" > icons/32x32.png </ Icon >
        
< Icon  Size ="48x48" > icons/48x48.png </ Icon >
        
< Icon  Size ="128x128" > icons/128x128.png </ Icon >
      
</ ApplicationIdentity.Icons >
    
</ ApplicationIdentity >
  
</ Deployment.ApplicationIdentity >
</ Deployment >

    注:上面这些图标文件必须在VS中以内容"Content"的文件嵌入到XAP文件中。
但我并不确保你也需要这里所有的文件,特别是这个"128x128"(文件);
    这样当单击鼠标右键后该菜单项将会变成“有效”:

    接着,我们前面创建的这个按钮将会触发一个对话框,提供给我们两个选项:
“将这个要运行在浏览器外的应用安装到桌面或开始菜单中”。


    注:那是个标准对话框,而通过使用我本人头像设置的对话框是下面这个样子:


    但我不打算这样做,我想还是显示标准对话框会好一些:)
    如果点击该对话框后,该应用会尝试 detach 它自身。对我而言,它所做的工作就是确保本地XAP文件的有效性。而不是去尝试把其它与它相关联的资源也获取到本地。

    注:第二个应用拷贝现在运行在了窗体中,它与浏览器窗体还是有一些区别的。
    现在我在桌面上有了该应用的一个图标:


    并且在开始菜单中也有:


    如果我从这两个地方运行这个应用时,会看到一个“非浏览器”的应用:


    此时当我在浏览器中运行这个原始(版本)的应用时,它显示了相同的“Detached”状态:


    好的,现在我修改一下原应用,将背景设置为"red":


   
    然后再次运行并发布这个新的XAP到WEB服务器上。起初,它显示“Detached”,然后它切换到“DetachedUpdatesAvailable".这意味着可以告诉用户该应用已被更新,并提示他们重启该应用:


     之后,将他们再运行该应用时,会获取到新的版本(我更新到服务器上的那个版本):

 
     如果想删除该应用,可以在本地的“detached”拷贝或浏览器中右击菜单:

     如果我点击上面菜单后,就会将开始菜单和桌面图标移除,这样在浏览器中该应用的状态就从“Detached”变成了“RunningOnline”.

 
     尽管 App.Current.ExecutionState属性返回“Detached”,但这与你在浏览器 或本 运行 该应用是无关的。这是需要有另一个标志来决定该应用是从浏览器还是从本地(分离) 启动。

     在Application中有一个标志即“RunningOffline”,看上去它会返回true/false  状态。 True 意味着当前应用是从本地独立启动的,而False则是在浏览器中启动的。
     就当前应用实际运行的代码而言,当其离线时(offline),存在一个进程(文件位于:Program Files\Microsoft Silverlight\VERSION\sllauncher.exe).看上去 它就是通过 应用名称 去运行相应程序。使用Reflector去浏览一下,发现其进程好像是非托管的 运行, 因此我不认为能 从中能获取一些内部信息。但其值得一说的是该launcher的roles之一 是保持应用的上下文安全。 即:如果应用是从域foo.com获取,那么该应用就必须本地化 运行。 尽管它是从 foo.com上启动( launched)的。
     还有要注意的是这种detached在功能上貌似依赖于Isolated Storage(隔离)存储。 因为我发 当把应用“detached”时,必须在打开Isolated Storage,真是如此。   
    

本文转自 daizhenjun 51CTO博客,原文链接:http://blog.51cto.com/daizhj/142599,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
133 2
|
6月前
|
IDE Linux 开发工具
如何在Linux运行RStudio Server并实现Web浏览器远程访问
如何在Linux运行RStudio Server并实现Web浏览器远程访问
211 0
|
14天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
19天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
20 1
|
4月前
|
JavaScript 前端开发 开发工具
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
|
26天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
3月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
53 1
|
3月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
80 0
|
3月前
|
Rust 安全 JavaScript
Rust 和 WebAssembly 搞大事啦!代码在浏览器中运行,这波操作简直逆天!
【8月更文挑战第31天】《Rust 与 WebAssembly:将 Rust 代码运行在浏览器中》介绍了 Rust 和 WebAssembly 的强大结合。Rust 是一门安全高效的编程语言,而 WebAssembly 则是新兴的网页技术标准,两者结合使得 Rust 代码能在浏览器中运行,带来更高的性能和安全性。文章通过示例代码展示了如何将 Rust 函数编译为 WebAssembly 格式并在网页中调用,从而实现复杂高效的应用程序,同时确保了内存安全性和跨平台兼容性,为开发者提供了全新的可能性。
146 0
|
5月前
|
安全 JavaScript 前端开发
Wasmer 3.0 发布,可在浏览器外运行 WebAssembly
Wasmer 3.0 发布,可在浏览器外运行 WebAssembly
58 2

相关实验场景

更多