//协议脚本
|
(function (f) {
|
if (typeof exports === "object" && typeof module !== "undefined") {
|
module.exports = f()
|
} else if (typeof define === "function" && define.amd) {
|
define([], f)
|
} else {
|
var g; if (typeof window !== "undefined") { g = window } else if (typeof global !== "undefined") {
|
g = global
|
} else if (typeof self !== "undefined") {
|
g = self
|
} else {
|
g = this
|
}
|
g.protocolCheck = f()
|
}
|
}
|
)
|
(function () {
|
var define, module, exports;
|
return (function e(t, n, r) {
|
function s(o, u) {
|
if (!n[o]) {
|
if (!t[o]) {
|
var a = typeof require == "function" && require;
|
if (!u && a) return a(o, !0);
|
if (i) return i(o, !0);
|
var f = new Error("Cannot find module '" + o + "'");
|
throw f.code = "MODULE_NOT_FOUND", f
|
}
|
var l = n[o] = {
|
exports: {}
|
};
|
t[o][0].call(l.exports, function (e) {
|
var n = t[o][1][e];
|
return s(n ? n : e)
|
}, l, l.exports, e, t, n, r)
|
}
|
return n[o].exports
|
}
|
var i = typeof require == "function" && require;
|
for (var o = 0; o < r.length; o++) s(r[o]);
|
return s
|
})
|
({
|
1: [function (require, module, exports) {
|
|
function _registerEvent(target, eventType, cb) {
|
if (target.addEventListener) {
|
target.addEventListener(eventType, cb);
|
return {
|
remove: function () {
|
target.removeEventListener(eventType, cb);
|
}
|
};
|
} else {
|
target.attachEvent(eventType, cb);
|
return {
|
remove: function () {
|
target.detachEvent(eventType, cb);
|
}
|
};
|
}
|
}
|
|
function _createHiddenIframe(target, uri) {
|
var iframe = document.createElement("iframe");
|
iframe.src = uri;
|
iframe.id = "hiddenIframe";
|
iframe.style.display = "none";
|
target.appendChild(iframe);
|
|
return iframe;
|
}
|
|
function openUriWithHiddenFrame(uri, failCb, successCb) {
|
|
var timeout = setTimeout(function () {
|
failCb();
|
handler.remove();
|
}, 1000);
|
|
var iframe = document.querySelector("#hiddenIframe");
|
if (!iframe) {
|
iframe = _createHiddenIframe(document.body, "about:blank");
|
}
|
|
var handler = _registerEvent(window, "blur", onBlur);
|
|
function onBlur() {
|
clearTimeout(timeout);
|
handler.remove();
|
successCb();
|
}
|
|
iframe.contentWindow.location.href = uri;
|
}
|
|
function openUriWithTimeoutHack(uri, failCb, successCb) {
|
|
var timeout = setTimeout(function () {
|
failCb();
|
handler.remove();
|
}, 1000);
|
|
//handle page running in an iframe (blur must be registered with top level window)
|
var target = window;
|
while (target != target.parent) {
|
target = target.parent;
|
}
|
|
var handler = _registerEvent(target, "blur", onBlur);
|
|
function onBlur() {
|
clearTimeout(timeout);
|
handler.remove();
|
successCb();
|
}
|
|
window.location = uri;
|
}
|
|
function openUriUsingFirefox(uri, failCb, successCb) {
|
var iframe = document.querySelector("#hiddenIframe");
|
|
if (!iframe) {
|
iframe = _createHiddenIframe(document.body, "about:blank");
|
}
|
|
try {
|
iframe.contentWindow.location.href = uri;
|
successCb();
|
} catch (e) {
|
if (e.name == "NS_ERROR_UNKNOWN_PROTOCOL") {
|
failCb();
|
}
|
}
|
}
|
|
function openUriUsingIEInOlderWindows(uri, failCb, successCb) {
|
if (getInternetExplorerVersion() === 10) {
|
openUriUsingIE10InWindows7(uri, failCb, successCb);
|
} else if (getInternetExplorerVersion() === 9 || getInternetExplorerVersion() === 11) {
|
openUriWithHiddenFrame(uri, failCb, successCb);
|
} else {
|
openUriInNewWindowHack(uri, failCb, successCb);
|
}
|
}
|
|
function openUriUsingIE10InWindows7(uri, failCb, successCb) {
|
var timeout = setTimeout(failCb, 1000);
|
window.addEventListener("blur", function () {
|
clearTimeout(timeout);
|
successCb();
|
});
|
|
var iframe = document.querySelector("#hiddenIframe");
|
if (!iframe) {
|
iframe = _createHiddenIframe(document.body, "about:blank");
|
}
|
try {
|
iframe.contentWindow.location.href = uri;
|
} catch (e) {
|
failCb();
|
clearTimeout(timeout);
|
}
|
}
|
|
function openUriInNewWindowHack(uri, failCb, successCb) {
|
var myWindow = window.open('', '', 'width=0,height=0');
|
|
myWindow.document.write("<iframe src='" + uri + "'></iframe>");
|
|
setTimeout(function () {
|
try {
|
myWindow.location.href;
|
myWindow.setTimeout("window.close()", 1000);
|
successCb();
|
} catch (e) {
|
myWindow.close();
|
failCb();
|
}
|
}, 1000);
|
}
|
|
function openUriWithMsLaunchUri(uri, failCb, successCb) {
|
navigator.msLaunchUri(uri,
|
successCb,
|
failCb
|
);
|
}
|
|
function checkBrowser() {
|
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
var ua = navigator.userAgent.toLowerCase();
|
return {
|
isOpera: isOpera,
|
isFirefox: typeof InstallTrigger !== 'undefined',
|
isSafari: (~ua.indexOf('safari') && !~ua.indexOf('chrome')) || Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0,
|
isIOS: /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream,
|
isChrome: !!window.chrome && !isOpera,
|
isIE: /*@cc_on!@*/false || !!document.documentMode // At least IE6
|
}
|
}
|
|
function getInternetExplorerVersion() {
|
var rv = -1;
|
if (navigator.appName === "Microsoft Internet Explorer") {
|
var ua = navigator.userAgent;
|
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
|
if (re.exec(ua) != null)
|
rv = parseFloat(RegExp.$1);
|
}
|
else if (navigator.appName === "Netscape") {
|
var ua = navigator.userAgent;
|
var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
|
if (re.exec(ua) != null) {
|
rv = parseFloat(RegExp.$1);
|
}
|
}
|
return rv;
|
}
|
|
module.exports = function (uri, failCb, successCb, unsupportedCb) {
|
function failCallback() {
|
failCb && failCb();
|
}
|
|
function successCallback() {
|
successCb && successCb();
|
}
|
|
if (navigator.msLaunchUri) { //for IE and Edge in Win 8 and Win 10
|
openUriWithMsLaunchUri(uri, failCb, successCb);
|
} else {
|
var browser = checkBrowser();
|
|
if (browser.isFirefox) {
|
openUriUsingFirefox(uri, failCallback, successCallback);
|
} else if (browser.isChrome || browser.isIOS) {
|
openUriWithTimeoutHack(uri, failCallback, successCallback);
|
} else if (browser.isIE) {
|
openUriUsingIEInOlderWindows(uri, failCallback, successCallback);
|
} else if (browser.isSafari) {
|
openUriWithHiddenFrame(uri, failCallback, successCallback);
|
} else {
|
unsupportedCb();
|
//not supported, implement please
|
}
|
}
|
}
|
|
}, {}]
|
}, {}, [1])(1)
|
});
|