【发布时间】:2014-07-28 04:57:43
【问题描述】:
我刚刚开始使用 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]);
}
}
});
可能出了什么问题?
【问题讨论】:
-
您使用的是什么版本的 JQM?它是否命中了该事件中的其他代码?
-
连接的位置应该没有区别,除非在
pageshow事件之后加载了实际不同的页面。所以你确定你通过那个事件点击了连接逻辑? -
@Archon 我正在使用 jQM 1.4.3 和 jQuery 2.1.1 ¿我应该降级吗?
-
@JanJongboom 它是通过connect(),唯一的区别是当从pageshow事件调用connect()时,socket.ondata事件永远不会被调用
-
尝试将
window.addEventListener('DOMContentLoaded',更改为document.addEventListener('mobileinit',
标签: javascript jquery jquery-mobile firefox-os