簡體   English   中英

套接字不適用於jQuery Mobile事件

[英]Socket not working on jQuery Mobile events

我剛剛開始使用jQuery Mobile為fxos開發帶有javascript的應用程序,並且已經陷入與框架相關的問題。 對於我的應用程序,我需要使用mozilla API(mozTCPSocket)提供的tcp通訊,當我在JQM事件之外運行它時,它工作得很好,但是當我從JQM事件(例如,pageshow)中調用socket.open()時,它就可以正常工作看起來每次調用后套接字對象都被殺死。

這是我的代碼:

window.addEventListener('DOMContentLoaded', function() {
    'use strict';

    var socket;
    var host = "someserver";
    var port = 6667;
    //connect(); // when calling from here, connection works fine

    $(document).bind("pageshow", function(e) {
        if (typeof e.currentTarget.URL==="string") {
            var haystack = $.mobile.path.parseUrl(e.currentTarget.URL);
            var needle = /^#server/;
            if (haystack.hash.search(needle)!==-1) {
                connect(); // ...from here is failing
            }
        }
    });

    function connect() {
        socket = navigator.mozTCPSocket.open(host,port);
    }

    socket.ondata = function (event) {
        var data = event.data;
        var lines = data.split('\r\n');
        for (var i=0;i<lines.length;i++) {
          if (lines[i].length>0) console.log(lines[i]);
        }
    }
});

可能出什么問題了?

這當然是錯誤的:

socket.ondata = function (event) {
    var data = event.data;
    var lines = data.split('\r\n');
    for (var i=0;i<lines.length;i++) {
      if (lines[i].length>0) console.log(lines[i]);
    }
}

您要在undefined對象上設置ondata方法。 這意味着以后對connect()任何調用都不會有任何效果。 同樣,當您定義undefined對象的方法時,上述方法可能會崩潰。

您應該將代碼重寫為類似以下內容。

window.addEventListener('DOMContentLoaded', function() {
    'use strict';

    var socket;
    var host = "someserver";
    var port = 6667;
    //connect(); // when calling from here, connection works fine

    $(document).bind("pageshow", function(e) {
        if (typeof e.currentTarget.URL==="string") {
            var haystack = $.mobile.path.parseUrl(e.currentTarget.URL);
            var needle = /^#server/;
            if (haystack.hash.search(needle)!==-1) {
                connect(); // ...from here is failing
            }
        }
    });

    function connect() {
        socket = navigator.mozTCPSocket.open(host, port);
        socket.ondata = onData;
    }

    function onData (event) {
        var data = event.data;
        var lines = data.split('\r\n');
        for (var i=0;i<lines.length;i++) {
          if (lines[i].length>0) console.log(lines[i]);
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM