微软CRX下载器

使非Edge浏览器,也能从微软扩展商店下载CRX文件

目前为 2021-08-17 提交的版本。查看 最新版本

// ==UserScript==
// @name         微软CRX下载器
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  使非Edge浏览器,也能从微软扩展商店下载CRX文件
// @author       那年那tu那些事
// @match        *://microsoftedge.microsoft.com/addons/*
// @icon         https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4sQDc?ver=30c2&q=90&m=6&h=40&w=40&b=%23FFFFFFFF&l=f&o=t&aim=true
// ==/UserScript==

(function() {

	//构造CRX下载器
	function MicrosoftCRXdownloader(crxid) {
		//ID写入URL
		var crxurl =
			"https://edge.microsoft.com/extensionwebstorebase/v1/crx?response=redirect&acceptformat=crx3&x=id%3D" +
			crxid.slice(0,32) + "%26installsource%3Dondemand%26uc";
		//构造下载按钮
		var newButton = document.createElement("button");
		newButton.id = "buttonID" + crxid;
		newButton.style =
			"z-index: 9999;overflow:hidden;box-sizing:border-box;transition:all 0.1s ease-in-out;line-height:1;font-family:inherit;align-items:center;white-space:nowrap;justify-content:center;text-decoration:none;font-size:14px;width:100%; min-width: 100px;height:100%; min-height: 40px; cursor: pointer; margin-inline-end: 8px;background: rgb(0, 120, 212);border:2px solid transparent;border-radius:2px;text-align: center;";
		newButton.innerHTML = "<a href=" + crxurl +
			" target='_blank' style='color: white;text-decoration:none;'><b>下载CRX</b><br></a>";
		//将“下载CRX”按钮替换“获取”按钮
		if ((document.getElementById("getOrRemoveButton-" + crxid) !== null) && (document
				.getElementById("buttonID" + crxid) === null)) {
			let buttonPare = document.getElementById("getOrRemoveButton-" + crxid).parentElement;
			let buttonChid = document.getElementById("getOrRemoveButton-" + crxid);
			buttonPare.insertBefore(newButton, buttonChid);
      if(buttonPare.children[2].getAttribute("aria-live")==="polite"){
        buttonPare.children[2].style.display="none";
      }
			console.log("buttonID" + crxid + "替换成功!");
			buttonChid.style.display = "none";
			document.getElementById("buttonID" + crxid).onclick = function() {
				window.open(crxurl);
			}
		}
	}

	//搜索获取CRX插件ID
	function SearchCRXid() {
		var AllButtonObj = document.getElementsByTagName("button");
		for (let i = 0; i < AllButtonObj.length; i++) {
			var ButtonObjID = AllButtonObj[i].getAttribute("id");

			if ((i - 1) >= 0) {
				var NewButtonObjID = AllButtonObj[i - 1].getAttribute("id");
			} else {
				var NewButtonObjID = ButtonObjID;
			}
			if (ButtonObjID !== null) {
				if (ButtonObjID.search("getOrRemoveButton-") !== -1) {
					var crxid = ButtonObjID.slice(ButtonObjID.search("getOrRemoveButton-") + "getOrRemoveButton-"
						.length);
					if (NewButtonObjID !== ("buttonID" + crxid)) {
						return crxid;
					}
				}
			}

		}
	}

	//判断是否执行
	if (window.location.pathname.search("detail/") !== -1) { //扩展详情页
		//获取扩展ID
		var crxid = window.location.pathname;
		crxid = crxid.slice(crxid.search("detail/") + "detail/".length);
		crxid = crxid.slice(crxid.search("/") + 1);
		//替换按钮
		var CRXtimerID = setInterval(function() {
			MicrosoftCRXdownloader(crxid);
		}, 200)
		//3s超时,刷新页面
		setTimeout(function() {
			clearInterval(CRXtimerID);
			if (document.getElementById("buttonID" + crxid) === null) {
				console.log("buttonID" + crxid + "替换失败!");
				window.location.reload();
			}
		}, 3000);
	} else { //商店主页及其他非详情页
		setInterval(function() {
			//获取扩展ID
			var crxid = SearchCRXid();
			//隐藏按钮
			for (let i = 0; i < document.getElementsByTagName("button").length; i++) {
				var hideButton = document.getElementsByTagName("button");
				if (hideButton[i].getAttribute("id") !== null) {
					//隐藏所有原本的“获取”按钮
					if (hideButton[i].getAttribute("id").search("getOrRemoveButton-") !== -1) {
						hideButton[i].style.display = "none";
					}
					//当原本的“获取”按钮消失,替换按钮也消失
					if (hideButton[i].getAttribute("id").search("buttonID") !== -1) {
						if (hideButton[i + 1].getAttribute("id") !== null) {
							if (hideButton[i + 1].getAttribute("id").search("getOrRemoveButton-") === -1) {
								hideButton[i].style.display = "none";
							} else {
								hideButton[i].style.display = "";
							}
						} else {
							hideButton[i].style.display = "none";
						}
					}

				}

			}
			//替换按钮
			if (crxid !== undefined) {
				MicrosoftCRXdownloader(crxid);
			}
		}, 100)
	}
})();