2012-11-28 62 views
1

想知道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數據?

此致敬禮!

+0

嗨,你能找到一個解決方案?我正在針對完全相同的問題,並沒有明確的答案 – Ichibanpanda

+0

沒有。仍然使用上述的愚蠢解決方案。 – 12N

回答

0

我建議你找到Telerik的silverlight組件來源並使用RadHtmlPlaceholder(略有越野車)。 +您可以啓用可信應用程序在SL 5的瀏覽器內運行,並使用WebBrowser控件(最佳質量),但僅適用於Windows。

+0

謝謝你的回答!我寧願不使用外部組件,特別是不要使用Telerik。不幸的是,WebBrowser的使用也不是一種選擇,因爲跨OS兼容性也是必需的。不過,我感謝你花時間提出這些建議。 – 12N

相關問題