Greasy Fork is available in English.
Custom Protocol Detection in Browser
สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/373130/635816/Protocol%20Check.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) });