想知道Silverlight中是否有任何方式可以打開新瀏覽器選項卡並設置其內容。總之,我的應用程序接收文件(二進制數據),並需要用戶的瀏覽器呈現它們。以編程方式使用Silverlight打開新瀏覽器選項卡並設置內容
我的應用程序從雲中的存儲庫下載內容(圖像/ pdfs /其他)並將它們作爲二進制數據存儲在本地緩存中;那麼在那之後,我需要一種方法在新標籤中顯示那些現在的本地內容給最終用戶。 「新標籤」要求是由於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,然後創建一個加載所提供內容的新選項卡,但是在處理二進制或base64數據時,javascript並不是太大 - 至少不能無縫地跨瀏覽器 - 而且整個事情看起來很愚蠢。
是否有解決方案通過Silverlight完成此操作,或者至少需要使用最少量的JavaScript?另外,是否有任何JavaScript庫你會推薦處理base64數據?
此致敬禮!
嗨,你能找到一個解決方案?我正在針對完全相同的問題,並沒有明確的答案 – Ichibanpanda
沒有。仍然使用上述的愚蠢解決方案。 – 12N