web端调起电脑中的exe程序

web端调起电脑中的exe程序,如果本地不存在exe文件则提供安装包进行下载

调起程序

 // jsonObj:以Json对象形式传给后台的参数
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)

      // 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') {
        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) { // 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)
})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值