| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | //#region 桌面消息区域//w3c 消息区域 还在草案中Namespace.register("U.MN");U.MN.nif = window.notificationInstance; //消息总控//#regionif (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
 |