web端调起电脑中的exe程序,如果本地不存在exe文件则提供安装包进行下载
调起程序
window.protocolCheck(`CAD-Viewer:/${jsonObj}`, (fail) => {
this.loading = false
this.$alert('检测到未安装CAD-Viewer插件,请确认是否下载?', '提示', {
confirmButtonText: '去下载',
type: 'warning'
})
.then(() => {
if (window.globalProperties.isProductionEnv) {
const downloadUrl = 'http://' + window.location.hostname + ':91/js/CAD-Viewer_Setup.exe'
console.log('🚀 downloadUrl:', downloadUrl)
window.open(downloadUrl)
} else {
window.location.href = '/js/CAD-Viewer_Setup.exe'
}
})
}, (succ) => {
this.loading = false
})
inde.html中引入js文件
<script src="<%= BASE_URL %>js/protocolcheck.js"></script>
protocolcheck.js文件
(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 || 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()
}, 1500)
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: false || !!document.documentMode
}
}
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') {
const ua = navigator.userAgent
const 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) {
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()
}
}
}
}, {}] }, {}, [1])(1)
})
