1

想知道 Silverlight 中是否有任何方法可以打开新的浏览器选项卡并设置其内容。简而言之,我的应用程序接收文件(二进制数据)并且需要让用户的浏览器显示它们。

我的应用程序从云存储库中下载内容(图像/pdfs/whatever),并将它们作为二进制数据存储在本地缓存中;然后在那之后,我需要一种方法在新选项卡中向最终用户显示这些现在的本地内容。“新标签”的要求是由于 silverlight 不支持渲染许多文件类型,例如 .gif、.pdf 和其他文件——浏览器可以轻松处理的东西,无论是本机还是广泛使用的插件。所以我目前的 WTF-y 解决方案使用 System.Windows.Browser 并包含以下内容:

        // Get document and body
        var doc = HtmlPage.Document;
        var body = doc.Body;

        // Create a <form> element and add it to the body
        var newForm = doc.CreateElement("form");
        newForm.SetAttribute("action", "www.example.com/contentpresenter.php");
        newForm.SetAttribute("enctype", "multipart/form-data");
        newForm.SetAttribute("method", "POST");
        newForm.SetAttribute("target", "_blank");
        body.AppendChild(newForm);


        var inp = doc.CreateElement("input");
        inp.SetAttribute("type", "text");
        inp.SetAttribute("name", "mcontent");
        inp.SetAttribute("value", Tools.ToBase64( content.Content as Stream ));
        newForm.AppendChild(inp);

        var inpt = doc.CreateElement("input");
        inpt.SetAttribute("type", "text");
        inpt.SetAttribute("name", "tcontent");
        inpt.SetAttribute("value", content.ContentType);
        newForm.AppendChild(inpt);

        // Send away!
        newForm.Invoke("submit");

简而言之,它创建了一个将内容发布到远程 PHP 脚本的 javascript 脚本,该脚本只对内容进行解码和呈现,这将在新选项卡中打开。是的,我完全知道这听起来多么愚蠢——但它确实起到了作用并按预期工作。

据我所知,由于安全限制,创建一个新的 HtmlWindow 并构建/更改其内容不是一种选择。一个明显的选择是让 Silverlight 生成 javascript,这反过来会创建一个新选项卡来加载所提供的内容,但是 javascript 在处理二进制或 base64 数据方面并不太大 - 至少不能无缝地跨浏览器 - 无论如何,整个事情看起来都很愚蠢.

有没有一种解决方案可以仅通过 Silverlight 实现这一目标,或者至少涉及最少数量的 javascript?或者,您是否推荐任何 javascript 库来处理 base64 数据?

此致!

4

1 回答 1

0

我建议你找到 Telerik 的 silverlight 组件源并使用 RadHtmlPlaceholder(有点错误)。+ 您可以启用受信任的应用程序以在 SL 5 的浏览器中运行并使用 WebBrowser 控件(最佳质量),但仅适用于 Windows。

于 2012-11-30T18:42:45.487 回答