vue3 web打开外部程序exe 两种方法

推荐使用第二种方法

1. reg文件 需要点注册表

新建EpicGamesLauncher.reg 之后在双击

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\EpicGamesLauncher]
@="URL:EpicGamesLauncher"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\EpicGamesLauncher\shell]
[HKEY_CLASSES_ROOT\EpicGamesLauncher\shell\open]
[HKEY_CLASSES_ROOT\EpicGamesLauncher\shell\open\command]
@="D:\\Epic Games\\Launcher\\Portal\\Binaries\\Win32\\EpicGamesLauncher.exe" 

@="D:\\Epic Games\\Launcher\\Portal\\Binaries\\Win32\\EpicGamesLauncher.exe" EpicGamesLauncher是软件名 建议有该单词都改成自己需要打开的文件名

! 注意路劲双\ 必须是绝对路劲

js文件 需要导出


/**
 * 打开本地可执行的exe程序
 * @param href
 */
export function openExe (href) {
  const a = document.createElement('a')
  a.setAttribute('href', href)
  a.click()
}

html 导入
import { openExe} from

const openpc = ()=>{
    openExe('EpicGamesLauncher://')
}

第二种方法 推荐使用

  1. 新建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 ? 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);
  });
  1. 项目的index.html 载入文件 <script src="./src/utils/protocolcheck.js"></script> //注意自己的路劲 随便位置就行
  2. 需要打开exe页面html:
window.protocolCheck(openUrl, () => {
    	alert('下载')
  });

如果报错 window.protocolCheck is not a function
请在需要打开的页面导入该protocolcheck文件 import '@/utils/protocolcheck.js'

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值