想知道 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 数据?
此致!