123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- //#region 桌面消息区域
- //w3c 消息区域 还在草案中
- Namespace.register("U.MN");
- U.MN.nif = window.notificationInstance; //消息总控
- //#region
- if (window.webkitNotifications) {
- //消息使用
- U.MN._UPS = window.webkitNotifications;
- //函数初始化使用
- U.M.HEPropert(U.MN._UPS, "onshow", function () {
- return this.ondisplay;
- },
- function (UVE) { this.ondisplay = UVE; });
- U.MN.UFN = function (UMT, UDE) {
- var _UCE = U.MN._UPS.createNotification(UDE.icon, UMT, UDE.body);
- _UCE.show(); return _UCE;
- }
- //继承消息
- U.MN.UFN.prototype = window.webkitNotifications;
- U.M.Setprototype(U.MN.UFN, {
- requestPermission: function (UCB) { U.MN._UPS.requestPermission(UCB); },
- permission: function () {
- return { 0: "granted", 1: "denied", 2: "default"}[U.MN._UPS.checkPermission()];
- },
- close: function () { this.cancel(); }
- });
- }
- //消息初始化
- U.MN.Notis = window.Notification = window.Notification || window.webkitNotifications;
- //#endregion
- //#region
- //添加消息提示
- U.MN.Noti = function (UDE) {
- return U.MN.Noti.get(UDE);
- }
- //初始化
- U.MN.Noti.get = function (UDE) {
- var _UDE = U.MN.Notis;
- if (_UDE) {
- if (_UDE.permission == "granted") {
- if (UDE) {
- return new U.MN.Noti.init(UDE);
- }
- } //初始化消息
- if (_UDE.permissi0on != "denied") {
- _UDE.requestPermission(function (UTF) {
- if (UTF == "granted") { U.MN.Noti.get(UDE); }
- });
- } //消息
- }
- }
- //初始化消息
- U.MN.Noti.init = function (UDE) {
- this.UNM; this.UT = UDE; this.UE = UDE.e; this.time = UDE.t || 0;
- }
- U.MN.Noti.checkPermission = function () {
- }
- //显示所有消息
- U.MN.Noti.show = function () {
- try { U.MN.nif.show() }
- catch (e) { return e; }
- }
- //清除消息
- U.MN.Noti.cancel = function () {
- try { U.MN.nif.cancel() }
- catch (e) { return e; }
- }
- //消息功能区域
- U.MN.Noti.init.prototype = {
- create: function (UMT, UDE, USE) { //创建消息 body dir icon lang onlcick onclose onerrer onshow slient tag title data noscreen renotify sound vibrate
- var _UME, _UME, _UTF = UDE == "string", Noti = U.MN.Notis; this.UE = USE = USE ? USE : this.UE;
- if (Noti.permission == "granted") {
- _UME = this.UNM = new Noti(UMT, UDE);
- (USE) && (this.event(USE)); (this.time) && (this.timerc(this.time));
- } //允许消息传递
- else if (Noti.permission != "denied") { Noti.requestPermission(U.M.apply(this, [[this.Permission, [UMT, UDE]]])); } //认证允许
- else { U.Alert("请启动消息推送!"); }
- },
- Permission: function (UMT, UDE, UTF) {//认证成功后
- if (UTF == "granted") { this.create(UMT, UDE); }
- },
- set: function (UDE) { //消息设置
- U.Ut.AddObj(this.UNM, UDE);
- },
- bind: function (UDE, UAE) { //事件绑定
- $(this.UNM).bind(UDE, UAE);
- },
- unbind: function () {//取消事件绑定
- $(this.UNM).unbind(UDE, UAE);
- },
- event: function (UDE) { //初始化消息
- var i, _UND = this.UNM, _UDE = { oc: "onclick", ocl: "onclose", oe: "onerror", os: "onshow" };
- for (i in UDE) { _UND[i] = _UND[_UDE[i]] = U.M.apply(this, [[this.aevent, [i, _UDE[i]]]]); }
- },
- aevent: function (UTF, UTP) {//事件统一出口
- var _UDE = this.UE;
- if (_UDE && _UDE[UTF]) {
- if (U.Ut.isFunction(_UDE[UTF])) {
- _UDE[UTF]();
- }
- else { U.M.apply(this, _UDE[UTF])(); }
- if (UTF == "oc" || UTF == "onclick") {//执行函数
- this.close();
- }
- }
- },
- close: function () {//关闭
- if (this.UNM) {
- this.UNM.close();
- this.dispose();
- }
- },
- dispose: function () { this.UT = this.UE = this.UNM = null; },
- timerc: function (UT, UFE) { //指定事件关闭消息
- setTimeout(U.M.apply(this, [[UFE], [this.close]]), UT);
- },
- show: function () { U.MN.show(); },
- cancel: function () { U.MN.cancel(); }
- }
- //#endregion
- //#region
- //IFrame之间的消息通知。全兼容解决方案,太复杂,需要精简版本。
- // 页面消息传递,解决跨域问题。
- U.MN.message = function (UDE) {
- return new U.MN.message.get.init(UDE);
- }
- U.MN.message._UTF = ("onmessage" in window);
- U.MN.message._UFS = function (UDE) {
- try {
- var _UME, _USE = "";
- if (U.MN.message._UTF) { _USE = UDE.data; }
- else { _USE = UDE || window.name; } //设置
- _USE = _USE.parseJSON();
- _UME = U.MN.message.get.func[_USE[1]];
- (_UME) && (_UME.message[_USE[0], _USE[2], _USE[3]]);
- } catch (e) { }
- };
- if (U.MN.message._UTF) {
- U.M.AddEvent("message", window, U.MN.message._UFS);
- }
- U.MN.message.get = U.MN.message.prototype = {
- func: {},
- ZS: 1,
- init: function (UDE) { //初始化消息
- U.Ut.AddObj(this, UDE);
- this.id = this.id || Guid.guidNoDash();
- this.func[this.id] = this;
- if (!U.MN.message._UTF) {
- if (this.Sender) {
- var _USE = this.obj;
- (U.Ut.isString(_USE)) && (_USE = $(_USE)[0]);
- this.url = U.M.getUrl(_USE.src).host;
- this.obj = $$("iframe", { style: { display: "none" }, width: "0", height: "0" }, document.body);
- }
- else { $().ready(U.M.apply(this, U.MN.message._UFS)); }
- }
- },
- message: function (UDE) {//接收消息
- (U.Ut.isFunction(this.me)) && (this.me(UDE));
- if (this.Sender && !U.MN.message._UTF) {
- var _UD = this.obj.contentWindow.document;
- _UD.open();
- _UD.write("");
- _UD.close();
- $(this.obj).remove();
- } //释放
- },
- post: function (UDE, UDID, UCE) {//提交消息
- var _UKE, _USE = this.obj;
- UDE = U.MS.jsonToStr[UDE, UDID || "", this.id, UCE];
- (U.Ut.isString(_USE)) && (_USE = $(_USE)[0]);
- if (U.MN.message._UTF) {
- try { _USE = _USE.contentWindow || _USE; }
- catch (e) { _USE = this.obj; } _USE.postMessage(UDE, "*");
- }
- else {
- if (this.url) {
- _USE.src = "about:blank";
- U.MD.IframeLoad(_USE, [[U.M.apply(this, [[this.ie, [_USE, UDE]]])]]);
- }
- else { window.name = UDE; window.location = this.lurl; }
- } //消息提示
- },
- ie: function (USE, UDE) { USE.contentWindow.name = UDE; USE.contentWindow.location.href = this.url; }
- }
- U.MN.message.get.init.prototype = U.MN.message.get;
- U.MN.message.cb = U.MN.message._UFS;
- //#endregion
|