4

HTML ページに Silverlight アプリケーションがあります。SL プラグインは、「オブジェクト」HTML タグでホストされます。ユーザーが Web ページを閉じたときに、Silverlight アプリケーション内で関数を呼び出したいと考えています。コードは次のようなものです。

(簡略化された) HTML コード:

<div id="silverlightControlHost">
    <object id="MyApp" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/MyApp.xap" />
        ...
        </object><iframe id="_sl_historyFrame"></iframe></div>

Javascript コード:

<script type="text/javascript">
    window.onbeforeunload = confirmExit;

    function confirmExit()
    {
        var control = document.getElementById("MyApp");
        var message = control.content.BrowserIntegration.MyAppFunction();

        if (message)
        {
            return message;
        }
    }
</script>

以前は機能していましたが、少なくとも Internet Explorer 8 では機能しなくなりました。HTML オブジェクト (control.content) の content プロパティは定義されていません。変。このプロパティに最近変更がありましたか? 私はそれが 2 か月前に機能したこと、そしてそれ以前に長い間うまく機能していたことを確信しています。Web サイトは信頼済みサイトにあり、それ以降変更した IE の設定は見つかりませんでした (1 つまたは 2 つある可能性がありますが、リストをスキャンしても何も見つかりませんでした)。

HTMLオブジェクトの「onLoad」イベントでテストすると、内容が未定義になっています。

その異常が以前は機能していたという事実なのか、それとも現在機能していないという事実なのかはわかりません。しかし、誰かが今それを機能させる方法を教えてくれるなら、それは私の一日を楽にしてくれます.

4

3 に答える 3

0

これらの操作は私の問題を解決しませんでした:

  • ウイルスの検出と削除
  • IE8 でセキュリティ レベルを下げる
  • Internet Explorer 8 の再インストール
  • Silverlight コンポーネントの再インストール

これが私の問題を解決したものです:

  • Silverlight Developer ランタイムの再インストール

注: .NET 開発には MS Visual Studio 2010 を使用しています。

于 2012-05-30T01:42:17.160 に答える
0

IE から Silverlight コードを呼び出すためのウィザードをいくつか作成します。

1)Silverlight コントロールを識別する必要があります。「id」タグを追加します。

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
            width="100%" height="100%" id="_sl_facebookapp">

2) Silverlight コードからスクリプト可能なオブジェクトを登録する必要があります。

HtmlPage.RegisterScriptableObject("FBSHandler", this);

3) 必要な Silverlight メソッドを ScriptableMember としてマークします。

[ScriptableMember]
        public void FBAuthorized(string authKey){}

4) Silverlight メソッドを呼び出すには、登録済みのスクリプト可能オブジェクトを使用する必要があります。

var silverlightCtrlId = '_sl_facebookapp';

function handleStatusResponse(response) {
    var control = document.getElementById(silverlightCtrlId);    
        var accessToken = response.authResponse.accessToken;
        if (control != null) {
            control.Content.FBSHandler.FBAuthorized(accessToken);
        }
    }
}

それは正常に動作します。それがあなたを助けることを願っています。

于 2012-05-29T06:10:27.630 に答える
0

これはタイミングの問題だと思います。Content 要素にアクセスするコードは、Silverlight コンポーネントが完全に読み込まれる前に実行される場合があります。

まったく同じ問題があり、要素が完全に読み込まれるまで Javascript Timer を使用して解決しました。興味深いことに、この問題は IE のみで発生し、他のブラウザでは発生しませんでした。

于 2012-09-05T08:42:47.103 に答える