Greasy Fork is available in English.
✨一键下载 4399, 7k7k flash 游戏, 并提供 flash 播放器✨
当前为
// ==UserScript==
// @name 一键下载 4399, 7k7k flash游戏 + flash 播放器
// @description ✨一键下载 4399, 7k7k flash 游戏, 并提供 flash 播放器✨
// @namespace https://fcmsb250.github.io/
// @version 0.2
// @author mininb666 http://greasyfork.icu/zh-CN/users/822325-mininb666 / dsy4567 https://github.com/dsy4567
// @license GPL-3.0
// @run-at document-start
// @match *://*.4399.com/*
// @match *://*.7k7k.com/*
// @connect *.4399.com
// @connect *.7k7k.com
// @grant GM_addValueChangeListener
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant unsafeWindow
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @homepageURL https://fcmsb250.github.io/
// @supportURL https://github.com/dsy4567/Fucking-Anti-Indulgence/
// ==/UserScript==
try {
Object.defineProperty(window, "showBlockFlashIE", {
value: ()=>{},
writable: false,
});
} catch (e) {}
try {
Object.defineProperty(window, "showBlockFlash", {
value: ()=>{},
writable: false,
});
} catch (e) {}
// ==download.js==
//download.js v4.2, by dandavis; 2008-2016. [CCBY2] see http://danml.com/download.html for tests/usage
// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime
// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs
// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.
// v4 adds AMD/UMD, commonJS, and plain browser support
// v4.1 adds url download capability via solo URL argument (same domain/CORS only)
// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors
// https://github.com/rndme/download
(function (root, factory) {
if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module.
define([], factory);
} else if (typeof exports === "object") {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.download = factory();
}
})(this, function () {
return function download(data, strFileName, strMimeType) {
var self = window, // this script is only for browsers anyway...
defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads
mimeType = strMimeType || defaultMime,
payload = data,
url = !strFileName && !strMimeType && payload,
anchor = document.createElement("a"),
toString = function (a) {
return String(a);
},
myBlob = self.Blob || self.MozBlob || self.WebKitBlob || toString,
fileName = strFileName || "download",
blob,
reader;
myBlob = myBlob.call ? myBlob.bind(self) : Blob;
if (String(this) === "true") {
//reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
payload = [payload, mimeType];
mimeType = payload[0];
payload = payload[1];
}
if (url && url.length < 2048) {
// if no filename and no mime, assume a url was passed as the only argument
fileName = url.split("/").pop().split("?")[0];
anchor.href = url; // assign href prop to temp anchor
if (anchor.href.indexOf(url) !== -1) {
// if the browser determines that it's a potentially valid url path:
var ajax = new XMLHttpRequest();
ajax.open("GET", url, true);
ajax.responseType = "blob";
ajax.onload = function (e) {
download(e.target.response, fileName, defaultMime);
};
setTimeout(function () {
ajax.send();
}, 0); // allows setting custom ajax headers using the return:
return ajax;
} // end if valid url?
} // end if url?
//go ahead and download dataURLs right away
if (/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)) {
if (payload.length > 1024 * 1024 * 1.999 && myBlob !== toString) {
payload = dataUrlToBlob(payload);
mimeType = payload.type || defaultMime;
} else {
return navigator.msSaveBlob // IE10 can't do a[download], only Blobs:
? navigator.msSaveBlob(dataUrlToBlob(payload), fileName)
: saver(payload); // everyone else can save dataURLs un-processed
}
} //end if dataURL passed?
blob = payload instanceof myBlob ? payload : new myBlob([payload], { type: mimeType });
function dataUrlToBlob(strUrl) {
var parts = strUrl.split(/[:;,]/),
type = parts[1],
decoder = parts[2] == "base64" ? atob : decodeURIComponent,
binData = decoder(parts.pop()),
mx = binData.length,
i = 0,
uiArr = new Uint8Array(mx);
for (i; i < mx; ++i) uiArr[i] = binData.charCodeAt(i);
return new myBlob([uiArr], { type: type });
}
function saver(url, winMode) {
if ("download" in anchor) {
//html5 A[download]
anchor.href = url;
anchor.setAttribute("download", fileName);
anchor.className = "download-js-link";
anchor.innerHTML = "downloading...";
anchor.style.display = "none";
document.body.appendChild(anchor);
setTimeout(function () {
anchor.click();
document.body.removeChild(anchor);
if (winMode === true) {
setTimeout(function () {
self.URL.revokeObjectURL(anchor.href);
}, 250);
}
}, 66);
return true;
}
// handle non-a[download] safari as best we can:
if (/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) {
url = url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
if (!window.open(url)) {
// popup blocked, offer direct download:
if (
confirm(
"Displaying New Document\n\nUse Save As... to download, then click back to return to this page."
)
) {
location.href = url;
}
}
return true;
}
//do iframe dataURL download (old ch+FF):
var f = document.createElement("iframe");
document.body.appendChild(f);
if (!winMode) {
// force a mime that will download:
url = "data:" + url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
}
f.src = url;
setTimeout(function () {
document.body.removeChild(f);
}, 333);
} //end saver
if (navigator.msSaveBlob) {
// IE10+ : (has Blob, but not a[download] or URL)
return navigator.msSaveBlob(blob, fileName);
}
if (self.URL) {
// simple fast and modern way using Blob and URL:
saver(self.URL.createObjectURL(blob), true);
} else {
// handle non-Blob()+non-URL browsers:
if (typeof blob === "string" || blob.constructor === toString) {
try {
return saver("data:" + mimeType + ";base64," + self.btoa(blob));
} catch (y) {
return saver("data:" + mimeType + "," + encodeURIComponent(blob));
}
}
// Blob but not URL support:
reader = new FileReader();
reader.onload = function (e) {
saver(this.result);
};
reader.readAsDataURL(blob);
}
return true;
}; /* end download() */
});
// ==/download.js==
// ==Fucking-Anti-Indulgence.user.js==
/**
* @name 🎇🎇🎇防沉迷减点料🎇🎇🎇
* @author mininb666 http://greasyfork.icu/zh-CN/users/822325-mininb666 / dsy4567 https://github.com/dsy4567
* @license GPL-3.0
*/
/**
*
* @param {String} 开始
* @param {String} 结束
* @param {String} 值
* @param {String} 类型 "1": url, "2": 字母+数字, "3": 数字
* @param {String} 前面追加
* @returns {String}
*/
function 获取中间(开始, 结束, 值, 类型, 前面追加) {
if (开始 && !值.indexOf(开始) != -1) {
值 = 值.substring(值.indexOf(开始) + 开始.length);
}
if (结束) {
值 = decodeURI(值.substring(0, 值.indexOf(结束)));
}
if (前面追加) {
值 = 前面追加 + 值;
}
switch (类型) {
case "1":
if (
!(
值.substring(0, 2) == "//" ||
值.substring(0, 7) == "http://" ||
值.substring(0, 8) == "https://"
)
) {
throw new Error("不正确的字符串");
}
break;
case "2":
if (!/^[0-9a-zA-Z]*$/g.test(值)) {
throw new Error("不正确的字符串");
}
break;
case "3":
if (isNaN(Number(值))) {
throw new Error("不正确的字符串");
}
break;
default:
break;
}
return 值;
}
// ==/Fucking-Anti-Indulgence.user.js==
(() => {
if (self == top) {
GM_registerMenuCommand("注意: 请勿直接下载 h5 游戏");
GM_registerMenuCommand("注意: 请勿在下载时同时打开其它游戏");
GM_registerMenuCommand("注意: 建议在游戏加载完成后下载游戏");
GM_registerMenuCommand("注意: 若等待时间过长则说明下载失败");
GM_registerMenuCommand("----------");
GM_registerMenuCommand("打开flash播放器", () => {
GM_openInTab("https://fcmsb250.github.io/flash.html");
});
GM_registerMenuCommand("下载4399 flash 游戏", () => {
let url = "";
try {
url = document.querySelector("#flashgame > param[name='movie']").value;
if (url.includes("?")) {
url = 获取中间("gameswf=", ".swf", url) + ".swf";
}
} catch (e) {
console.error(e);
try {
url = document.querySelector("#swf1 > param[name='movie']").value;
if (url.includes("?")) {
url = 获取中间("gameswf=", ".swf", url) + ".swf";
}
} catch (e) {
console.error(e);
}
}
if (url) {
if (
!(
url.substring(0, 2) == "//" ||
url.substring(0, 7) == "http://" ||
url.substring(0, 8) == "https://"
)
) {
url = location.href.substring(0, location.href.lastIndexOf("/") + 1) + url;
}
GM_setValue("url", url);
} else {
console.log("失败");
GM_setValue("down4399", Math.random());
}
});
GM_registerMenuCommand("下载7k7k flash 游戏", () => {
try {
let url = document.querySelector("#gameobj").src;
if (url == location.href || !url) {
throw "";
}
location.href = url;
} catch (e) {
console.error(e);
try {
var game_path = "";
var game_id = unsafeWindow.gameInfo.gameId;
//同步请求
$.ajaxSettings.async = false;
$.get(
"http://www.7k7k.com/open_api/request?action=Flash.Game&game=" + game_id,
function (data) {
try {
game_path = JSON.parse(data).result.url;
location.href = game_path;
} catch (e) {
alert("失败");
}
}
);
$.ajaxSettings.async = true;
} catch (e) {
console.error(e);
alert("失败");
}
}
});
GM_addValueChangeListener("url", (name, old_value, new_value, remote) => {
location.href = new_value;
});
} else {
if (location.href.includes("4399") && location.href.includes("upload_swf")) {
GM_addValueChangeListener("down4399", (name, old_value, new_value, remote) => {
let url = "";
try {
url = document.querySelector("#flashgame > param[name='movie']").value;
if (url.includes("?")) {
url = 获取中间("gameswf=", ".swf", url) + ".swf";
}
} catch (e) {
console.error(e);
try {
url = document.querySelector("#swf1 > param[name='movie']").value;
if (url.includes("?")) {
url = 获取中间("gameswf=", ".swf", url) + ".swf";
}
} catch (e) {
console.error(e);
}
}
if (url) {
if (
!(
url.substring(0, 2) == "//" ||
url.substring(0, 7) == "http://" ||
url.substring(0, 8) == "https://"
)
) {
url = location.href.substring(0, location.href.lastIndexOf("/") + 1) + url;
}
GM_setValue("url", url);
} else {
console.log("失败");
}
});
}
}
if (
location.pathname.includes(".swf") &&
!document.documentElement.innerHTML.includes("was not found on this server.")
) {
download(location.href);
return;
}
})();