Greasy Fork is available in English.

QQ 空间绕过 Flash 检测,避免 Flash 提示

由于 Flash 被彻底移除,为避免 QQ 空间网页版提示需要 Flash:本脚本通过覆写 QQ 空间检测 Flash 版本函数,伪造版本/可用性,绕过 Flash 检测。

// ==UserScript==
// @name         QQ 空间绕过 Flash 检测,避免 Flash 提示
// @namespace    https://iyn.me/use/qzone-flash-trick/
// @version      0.2
// @description  由于 Flash 被彻底移除,为避免 QQ 空间网页版提示需要 Flash:本脚本通过覆写 QQ 空间检测 Flash 版本函数,伪造版本/可用性,绕过 Flash 检测。
//               -------------
//               QQ 空间网页版使用某些功能(如插入相册图片)前会莫名检查 Flash 版本,但实际上这些功能并无 Flash 参与的痕迹(已 HTML5 化)。
//               以插入相册图片功能为例,在 iPad 浏览器环境则会跳过 Flash 检测,这也侧面说明了该功能实际上无需依赖 Flash。
//               本脚本只是欺骗 QQ 空间 Flash 可用,遇到确实需要 Flash 的功能(如上传视频),则无法避免地会出现功能失效。
//               所谓“避免 Flash 提示”是指:防止 QQ 空间某些功能(错误地)提示(页面提示)需要 Flash 而阻断使用或影响视觉;但浏览器依旧会提示页面尝试运行 Flash。
//               最后,欢迎您在使用本脚本的过程中随时反馈遇到的任何问题、异常或错误。
// @author       一年又一年
// @include      /^https://user\.qzone\.qq\.com/\d+/
// @match        https://user.qzone.qq.com/proxy/domain/qzs.qq.com/qzone/*
// @match        https://rc.qzone.qq.com/*
// @grant        none
// @compatible   chrome
// @compatible   firefox
// @license      MIT
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';
    const SCRIPT_NAME = '[QQ 空间绕过 Flash 检测]';
    const DEBUG_MODE = false; // 调试模式开关

    const doQzoneFlashBypassTrick = () => {
        window.QZFL.media.getFlashVersion = function () {
            // 伪造 Flash 版本:major: 32, minor: 0, rev: 0, add: 465
            window.QZFL.media._flashVersion = new window.QZFL.media.SWFVersion(32, 0, 0, 465);

            if (DEBUG_MODE) {
                // 调试模式下输出函数调用栈,可检视 Flash 检测调用位点。
                let e = new Error('检测位点/调用栈');
                e.name = SCRIPT_NAME;
                console.log(e);
            }

            return window.QZFL.media._flashVersion;
        };
    };

    // ========= 执行脚本并管理错误 ==========

    try {
        doQzoneFlashBypassTrick();
    } catch (e) {
        // 执行绕过脚本异常
        e.name = SCRIPT_NAME + ': ' + e.name;
        console.log('位于 window:', window, window.location, window.document);
        throw e;
    }

    // ========= 执行完成 =========

    console.log(SCRIPT_NAME + ':', '脚本已替换 QZFL.media.getFlashVersion() 函数。');
    if (DEBUG_MODE) {
        console.log('位于 window:', window, window.location, window.document);
    }
})();