⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cometd.js

📁 OA系统实现以下功能: a、个人办公,我的办公桌 b、公文管理 c、工作流程 d、组织管理 e. 权限管理
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.require("dojo.io.common");dojo.provide("dojo.io.cometd");dojo.require("dojo.AdapterRegistry");dojo.require("dojo.json");dojo.require("dojo.io.BrowserIO");dojo.require("dojo.io.IframeIO");dojo.require("dojo.io.ScriptSrcIO");dojo.require("dojo.io.cookie");dojo.require("dojo.event.*");dojo.require("dojo.lang.common");dojo.require("dojo.lang.func");cometd = new function () {	this.initialized = false;	this.connected = false;	this.connectionTypes = new dojo.AdapterRegistry(true);	this.version = 0.1;	this.minimumVersion = 0.1;	this.clientId = null;	this._isXD = false;	this.handshakeReturn = null;	this.currentTransport = null;	this.url = null;	this.lastMessage = null;	this.globalTopicChannels = {};	this.backlog = [];	this.tunnelInit = function (childLocation, childDomain) {	};	this.tunnelCollapse = function () {		dojo.debug("tunnel collapsed!");	};	this.init = function (props, root, bargs) {		props = props || {};		props.version = this.version;		props.minimumVersion = this.minimumVersion;		props.channel = "/meta/handshake";		this.url = root || djConfig["cometdRoot"];		if (!this.url) {			dojo.debug("no cometd root specified in djConfig and no root passed");			return;		}		var bindArgs = {url:this.url, method:"POST", mimetype:"text/json", load:dojo.lang.hitch(this, "finishInit"), content:{"message":dojo.json.serialize([props])}};		var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";		var r = ("" + window.location).match(new RegExp(regexp));		if (r[4]) {			var tmp = r[4].split(":");			var thisHost = tmp[0];			var thisPort = tmp[1] || "80";			r = this.url.match(new RegExp(regexp));			if (r[4]) {				tmp = r[4].split(":");				var urlHost = tmp[0];				var urlPort = tmp[1] || "80";				if ((urlHost != thisHost) || (urlPort != thisPort)) {					dojo.debug(thisHost, urlHost);					dojo.debug(thisPort, urlPort);					this._isXD = true;					bindArgs.transport = "ScriptSrcTransport";					bindArgs.jsonParamName = "jsonp";					bindArgs.method = "GET";				}			}		}		if (bargs) {			dojo.lang.mixin(bindArgs, bargs);		}		return dojo.io.bind(bindArgs);	};	this.finishInit = function (type, data, evt, request) {		data = data[0];		this.handshakeReturn = data;		if (data["authSuccessful"] == false) {			dojo.debug("cometd authentication failed");			return;		}		if (data.version < this.minimumVersion) {			dojo.debug("cometd protocol version mismatch. We wanted", this.minimumVersion, "but got", data.version);			return;		}		this.currentTransport = this.connectionTypes.match(data.supportedConnectionTypes, data.version, this._isXD);		this.currentTransport.version = data.version;		this.clientId = data.clientId;		this.tunnelInit = dojo.lang.hitch(this.currentTransport, "tunnelInit");		this.tunnelCollapse = dojo.lang.hitch(this.currentTransport, "tunnelCollapse");		this.initialized = true;		this.currentTransport.startup(data);		while (this.backlog.length != 0) {			var cur = this.backlog.shift();			var fn = cur.shift();			this[fn].apply(this, cur);		}	};	this._getRandStr = function () {		return Math.random().toString().substring(2, 10);	};	this.deliver = function (messages) {		dojo.lang.forEach(messages, this._deliver, this);	};	this._deliver = function (message) {		if (!message["channel"]) {			dojo.debug("cometd error: no channel for message!");			return;		}		if (!this.currentTransport) {			this.backlog.push(["deliver", message]);			return;		}		this.lastMessage = message;		if ((message.channel.length > 5) && (message.channel.substr(0, 5) == "/meta")) {			switch (message.channel) {			  case "/meta/subscribe":				if (!message.successful) {					dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);					return;				}				this.subscribed(message.subscription, message);				break;			  case "/meta/unsubscribe":				if (!message.successful) {					dojo.debug("cometd unsubscription error for channel", message.channel, ":", message.error);					return;				}				this.unsubscribed(message.subscription, message);				break;			}		}		this.currentTransport.deliver(message);		if (message.data) {			var tname = (this.globalTopicChannels[message.channel]) ? message.channel : "/cometd" + message.channel;			dojo.event.topic.publish(tname, message);		}	};	this.disconnect = function () {		if (!this.currentTransport) {			dojo.debug("no current transport to disconnect from");			return;		}		this.currentTransport.disconnect();	};	this.publish = function (channel, data, properties) {		if (!this.currentTransport) {			this.backlog.push(["publish", channel, data, properties]);			return;		}		var message = {data:data, channel:channel};		if (properties) {			dojo.lang.mixin(message, properties);		}		return this.currentTransport.sendMessage(message);	};	this.subscribe = function (channel, useLocalTopics, objOrFunc, funcName) {		if (!this.currentTransport) {			this.backlog.push(["subscribe", channel, useLocalTopics, objOrFunc, funcName]);			return;		}		if (objOrFunc) {			var tname = (useLocalTopics) ? channel : "/cometd" + channel;			if (useLocalTopics) {				this.globalTopicChannels[channel] = true;			}			dojo.event.topic.subscribe(tname, objOrFunc, funcName);		}		return this.currentTransport.sendMessage({channel:"/meta/subscribe", subscription:channel});	};	this.subscribed = function (channel, message) {		dojo.debug(channel);		dojo.debugShallow(message);	};	this.unsubscribe = function (channel, useLocalTopics, objOrFunc, funcName) {		if (!this.currentTransport) {			this.backlog.push(["unsubscribe", channel, useLocalTopics, objOrFunc, funcName]);			return;		}		if (objOrFunc) {			var tname = (useLocalTopics) ? channel : "/cometd" + channel;			dojo.event.topic.unsubscribe(tname, objOrFunc, funcName);		}		return this.currentTransport.sendMessage({channel:"/meta/unsubscribe", subscription:channel});	};	this.unsubscribed = function (channel, message) {		dojo.debug(channel);		dojo.debugShallow(message);	};};cometd.iframeTransport = new function () {	this.connected = false;	this.connectionId = null;	this.rcvNode = null;	this.rcvNodeName = "";	this.phonyForm = null;	this.authToken = null;	this.lastTimestamp = null;	this.lastId = null;	this.backlog = [];	this.check = function (types, version, xdomain) {		return ((!xdomain) && (!dojo.render.html.safari) && (dojo.lang.inArray(types, "iframe")));	};	this.tunnelInit = function () {		this.postToIframe({message:dojo.json.serialize([{channel:"/meta/connect", clientId:cometd.clientId, connectionType:"iframe"}])});	};	this.tunnelCollapse = function () {		if (this.connected) {			this.connected = false;			this.postToIframe({message:dojo.json.serialize([{channel:"/meta/reconnect", clientId:cometd.clientId, connectionId:this.connectionId, timestamp:this.lastTimestamp, id:this.lastId}])});		}	};	this.deliver = function (message) {		if (message["timestamp"]) {			this.lastTimestamp = message.timestamp;		}		if (message["id"]) {			this.lastId = message.id;		}		if ((message.channel.length > 5) && (message.channel.substr(0, 5) == "/meta")) {			switch (message.channel) {			  case "/meta/connect":				if (!message.successful) {					dojo.debug("cometd connection error:", message.error);					return;				}				this.connectionId = message.connectionId;				this.connected = true;				this.processBacklog();				break;			  case "/meta/reconnect":				if (!message.successful) {					dojo.debug("cometd reconnection error:", message.error);					return;				}				this.connected = true;				break;			  case "/meta/subscribe":				if (!message.successful) {					dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);					return;				}				dojo.debug(message.channel);				break;			}		}	};	this.widenDomain = function (domainStr) {		var cd = domainStr || document.domain;		if (cd.indexOf(".") == -1) {			return;		}		var dps = cd.split(".");		if (dps.length <= 2) {			return;		}		dps = dps.slice(dps.length - 2);		document.domain = dps.join(".");		return document.domain;	};	this.postToIframe = function (content, url) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -