2

Silverlight メディア プレーヤーを表示する必要がある魔女の AngularJS 上に構築された SPA があります。現在選択されているメディア ファイルの ID 番号を Silverlight アプリに渡して、再生に必要な情報を取得できるようにする必要があります。まず、Silverlight の initParams を次のように使用してみました。

<param name="initParams" runat="server" value="{{value}}"/>

その後、URL から ID を取得して、Silverlight アプリの onLoad 関数から次のように設定しようとしました。

<script type="text/javascript">
    var pathArray = window.location.pathname.split('/');
    var value = pathArray[1];
    var slCtl = null;
    function pluginLoaded(sender, args) {
        slCtl = sender.getHost();
        slCtl.Content.SilverlightObject.SetMediaId(value);
    }
</script>

しかしすぐに、AngularJS コントローラーからの値と、ページが読み込まれた後に設定された URL の両方であることに気付きました。そのため、Silverlight アプリが読み込まれたときに、正しい情報がありませんでした。

現時点では、これを解決する最善の方法は、Silverlight アプリケーションを作成する AngularJS ディレクティブを作成することだと思います。これは、id にアクセスできるためです。

私はここで正しい道を進んでいますか?この問題を解決する最も簡単な方法は何ですか?

編集: 私の最初の試みの 1 つで、Silverlights OnLoad にいくつかのインライン javacript 関数を添付しました

<param name="onLoad" value="pluginLoaded" />

そのメソッドは、Silverlight アプリケーションのメソッドを呼び出して、値を渡します。

slCtl.Content.SilverlightObject.SetMediaId(value);

このメソッドを AngularJS から呼び出すことは可能でしょうか? これについてもディレクティブを作成する必要がありますか、それともコントローラーから作成できますか? コントローラー/ディレクティブで Silverlight オブジェクトにアクセスするにはどうすればよいですか?

4

2 に答える 2

1

これが私たちが思いついた最終的な解決策です。

<div class="ui-helper-clearfix no-left-padding">
    <form id="form1" runat="server" style="height: 500px">
        <div id="silverlightControlHost" style="height: 500px">

            <object id="MediaPlayer_8" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="800" height="500">
                <param name="source" value="../../../ClientBin/MediaPlayer.xap" />
                <param name="onError" value="onSilverlightError" />
                <param name="background" value="#f2f2f2" />
                <param name="minRuntimeVersion" value="5.0.61118.0" />
                <param name="autoUpgrade" value="true" />
                <param name="onLoad" value="pluginLoaded" />
                <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration: none">
                    <img src="http://go.microsoft.com/fwlink/?LinkUserId=161376" alt="Get Microsoft Silverlight" style="border-style: none" />
                </a>
            </object>
            <iframe id="_sl_historyFrame" style="border: 0px; height: 0px; visibility: hidden; width: 0px;"></iframe>
        </div>
    </form>
    <script type="text/javascript">
            var slCtl = null;
            function pluginLoaded(sender, args) {
                slCtl = sender.getHost();
                slCtl.Content.SilverlightObject.SetMediaId(@ViewBag.CurrentMedia);
            }
        </script>

重要なものは次のとおりです。

<param name="onLoad" value="pluginLoaded" />

<script type="text/javascript">
            var slCtl = null;
            function pluginLoaded(sender, args) {
                slCtl = sender.getHost();
                slCtl.Content.SilverlightObject.SetMediaId(@ViewBag.CurrentMedia);
            }
        </script>

Silverlight アプリでは

[ScriptableMember]
    public void SetMediaId(int mediaId)
    {
        _viewedMediaId = mediaId;
        _proxy.GetMediaAsync(_viewedMediaId);
    }

お役に立てれば。

于 2015-08-25T12:43:28.677 に答える
0

DOM操作を行う必要があるときはいつでも、ディレクティブから行う必要があります

于 2013-10-07T21:15:22.947 に答える