1

私は信号機が初めてです。MVC 4.0 アプリケーションを箱から出して開始し、Index View でシグナル JavaScript を接続しました。[登録] または [ログイン] ボタンをクリックすると、signalr が JavaScript エラーをスローします。

Unhandled exception at line 11, column 10700 in http://localhost:49172/Scripts/jquery.signalR-   0.5.1.min.js

0x800a138f - Microsoft JScript runtime error: Unable to set value of the property 'src': object is null or undefined

任意の提案をいただければ幸いです。

編集:

これは私のコードの範囲です:

$(function () {    
    var blasht = $.connection.blashtHub;    
    blasht.addMessage = function (message) {
        $('#messages').append('<li>' + message + '');
    };     

    $("#blashtIt").click(function () {
        var control = $('#blashtText');
        var control2 = $('#hiddenUserId');
        // Call the chat method on the server  
        blasht.send(control2.val(), control.val());
        control.val('');
    });

    blasht.updateTopTen = function (message) {
        //add code to update the top user's list
    };

    // Start the connection   
    $.connection.hub.start();
});

示唆されたように、私は分を落としました。これがクラッシュしている場所です。frame.sc = src; ライン。

reconnect: function (connection) {
    var that = this;
    window.setTimeout(function () {
    var frame = connection.frame,
    src = transportLogic.getUrl(connection, that.name, true) + "&frameId=" + connection.frameId;
               connection.log("Upating iframe src to '" + src + "'.");
               frame.src = src;
            }, connection.reconnectDelay);
        },

私ではなく、SignalR がこの再接続機能を呼び出しています。明らかに、それがサーバーとの接続を維持する方法です。

4

2 に答える 2

9

これは、IE9 が使用する「Forever-Frame」実装の SignalR の現在のバージョンのバグです: https://github.com/SignalR/SignalR/issues/446

回避策は、SignalR が Forever-Frame トランスポートを使用しないようにすることです (https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client)。だから変える

$.connection.hub.start();

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
于 2012-06-28T20:01:46.977 に答える
0

エラーメッセージから、コードを表示していなければ、次のようなコードがあると推測する必要があります。

foo.src = someValue;

...またははどこにfooありますnullundefined。これはなぜかfoo nullという疑問を投げかけundefinedますが、それ以上の文脈がなければ、言うことは不可能です。IE8 +の「F12開発ツール」をステップスルーすると、それを特定するのに役立つ場合があります。


(コードが投稿された後に更新)

エラーの原因となっている行は。だと思いますframe.src = src;。一貫したインデントを使用してそのコードを再フォーマットします。

reconnect: function (connection) {
    var that = this;
    window.setTimeout(function () {
        var frame = connection.frame,
            src = transportLogic.getUrl(connection, that.name, true) + "&frameId=" + connection.frameId;
        connection.log("Upating iframe src to '" + src + "'.");
        frame.src = src;  // <=== Presumably this is the line failing
    }, connection.reconnectDelay);
},

遅延関数が呼び出された時点で、connection.frameisnullまたはundefined。したがって、それがなぜであるかを知る必要があります。私が最初に行うことは、が呼び出されたかどうか、または呼び出されたのが後でconnection.frameあるかどうか、または遅延関数が実行された後であるかどうかを確認することです(たとえば、その間に何かがクリアされた場合、その場合は理由)。nullundefinedreconnect

于 2012-06-26T23:20:42.180 に答える