以编程方式使用Silverlight打开新的浏览器选项卡并设置内容

时间:2012-11-28 12:31:31

标签: javascript silverlight

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

祝你好运!

1 个答案:

答案 0 :(得分:0)

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