1

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");

つまり、コンテンツをリモートPHPスクリプトに投稿するjavascriptスクリプトを作成します。このスクリプトは、コンテンツをデコードして表示するだけで、新しいタブで開きます。はい、私はそれがいかにばかげているように聞こえるかを完全に知っています-しかし、トリックを行い、意図したとおりに機能します。

私の知る限り、新しいHtmlWindowを作成し、そのコンテンツを構築/変更することは、セキュリティ上の制約のためにオプションではありません。明らかなオプションは、Silverlightにjavascriptを生成させることです。これにより、提供されたコンテンツをロードする新しいタブが作成されますが、javascriptは、バイナリまたはbase64データの処理においてそれほど大きくはありません(少なくともクロスブラウザーはシームレスではありません)。 。

これをSilverlightだけで、または少なくとも最小限のJavaScriptを使用して実現するためのソリューションはありますか?または、base64データの処理に推奨するjavascriptライブラリはありますか?

よろしくお願いします!

4

1 に答える 1

0

Telerik の Silverlight コンポーネント ソースを見つけて、RadHtmlPlaceholder (少しバグがあります) を使用することをお勧めします。+ 信頼できるアプリケーションを SL 5 のブラウザー内で実行できるようにし、WebBrowser コントロール (最高品質) を使用できますが、Windows のみです。

于 2012-11-30T18:42:45.487 に答える