想知道Silverlight中是否有任何方法可以打开新的浏览器选项卡并设置其内容。简而言之,我的应用程序接收文件(二进制数据),并需要用户的浏览器呈现它们。
我的应用程序从云中的存储库下载内容(images / 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");
简而言之,它创建了一个javascript脚本,将内容发布到远程PHP脚本,而后者只是解码和呈现内容,而这些内容将在新标签页中打开。是的,我完全清楚这听起来多么愚蠢 - 但是诀窍是否有效。
据我所知,由于安全限制,创建新的HtmlWindow并构建/更改其内容不是一种选择。一个显而易见的选择是让Silverlight生成javascript,然后创建一个新的选项卡来加载提供的内容,但javascript在处理二进制或base64数据方面不是太大 - 至少不能无缝地跨浏览器 - 而且整个事情似乎都很愚蠢。
是否有解决方案仅通过Silverlight实现此目的,或者至少涉及最少量的javascript?或者,您是否建议使用任何javascript库来处理base64数据?
祝你好运!
答案 0 :(得分:0)
我建议你找到Telerik的silverlight组件来源并使用RadHtmlPlaceholder(略有错误)。 +您可以启用受信任的应用程序在SL 5的浏览器内运行并使用WebBrowser控件(最佳质量),但仅适用于Windows。