我有一个浏览器托管的SL应用。我想要的很简单:应用程序生成一个文档(xls,doc,jpg ...),用户单击一个按钮,然后可选地出现一个对话框,他需要点击OK,然后Excel,Word,一张图片查看器或其他任何内容启动并打开SL应用程序创建的文档。
到目前为止,我所看到的是不完整的解决方案。
大多数人建议弹出一个SaveFileDialog。首先,在保存之后,用户需要首先找到该文件才能打开它,并且他通常甚至不想首先保存它,只需查看它。糟糕的用户体验。
另一种可能的解决方案是将文件保存在独立存储中,并使用COM互操作启动Excel。但我相信浏览器主机中没有COM互操作,而COM互操作非常依赖于平台。我的SL应用程序也适用于Moonlight。
然后其他人建议将浏览器从SL重定向到文档的HTTP位置。这可以工作,但这并没有真正解决我的问题,因为那时我需要以某种方式将文档放在服务器上。
有人知道真正的解决方案吗?这里也可以接受'不'作为答案。
答案 0 :(得分:3)
明确的答案是:不。你真正想从浏览器主机做什么会破坏我们对Silverlight插件的期望安全性。
即将推出的Silverlight 5可以满足您的要求,允许系统管理员使用组策略向在浏览器中运行的某些xaps授予可信行为,但此解决方案是否会延伸至月光(如果发生这种情况)是否是任何人的猜测。
可能值得考虑的一些问题,为什么在客户端上运行的Silverlight应用程序负责生成文档?这只是出于可扩展性的原因吗?如果没有,为什么要将文档生成代码移动到服务器?
答案 1 :(得分:0)
如果文件保存在服务器端,那么我们可以使用以下代码打开该文件
string uri = HtmlPage.Document.DocumentUri.ToString();
uri = uri.Remove(uri.LastIndexOf('#'), uri.Length - uri.LastIndexOf('#'));
uri=uri.Remove(uri.LastIndexOf('/'));
System.Windows.Browser.HtmlPage.PopupWindow(new Uri(uri + "/FolderName/filenamewithextension"), "_blank", null);