getVaptchaCode

vaptcha-iframe 依赖库

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.greasyfork.org/scripts/418420/878837/getVaptchaCode.js

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

/**
 * getVaptchaCode v1.0
 * @author Jixun<https://jixun.moe/>
 * @license BSD-3-Clause
 */

function getVaptchaCode(frameURL, container) {
    return new Promise((resolve) => {
        const {origin} = new URL(frameURL);
        const id = 'id' + Date.now() + Math.random();
        const frame = document.createElement('iframe');
        frame.style.transition = 'opacity 1s 1s';
        frame.style.opacity = 1;

        const eventHandler = (event) => {
            if (event.data.vaptcha === id) {
                resolve(event.data.token);
                window.removeEventListener('message', eventHandler);
                frame.style.opacity = 0;

                // Remove iframe after fadeout effects.
                setTimeout(() => {
                    if (frame.parentNode) {
                        frame.parentNode.removeChild(frame);
                    }
                }, 1000);
            }
        };

        window.addEventListener('message', eventHandler);

        frame.src = frameURL;
        frame.onload = () => {
            frame.contentWindow.postMessage({ vaptcha: 'init', id }, origin);
        };
        container.appendChild(frame);
    });
}