You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
8.4 KiB
275 lines
8.4 KiB
(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);
|
|
});
|