SkPatcher

修改 Skulpt 以添加加载 js 库功能。

目前为 2024-03-25 提交的版本。查看 最新版本

// ==UserScript==
// @name         SkPatcher
// @version      0.2.1
// @description  修改 Skulpt 以添加加载 js 库功能。
// @author       lrs2187
// @license MIT
// @match        *://code.xueersi.com/*
// @match        *://turtle.codemao.cn/*
// @grant        none
// @run-at       document-start
// @namespace https://code.xueersi.com/
// ==/UserScript==

(function() {
    'use strict';
    var counts = 0;

    function waitForSkulpt() {
        if (typeof Sk === 'undefined') {
            counts = counts + 1;
            if (counts >= 60)
            {
                console.log("SkPatcher.waitForSkulpt 1 minutes out. Unlistening...");
                return;
            }
            setTimeout(waitForSkulpt, 1000);
        } else {
            console.log("SkPatcher.waitForSkulpt Sk created! Injecting...");
            injectCustomImport();
        }
    }

    function injectCustomImport() {
        Sk.builtins.__import__ = function(lib_url, lib_name) {
            console.log('SkPatcher.__import__ got url ', lib_url, ' name ', lib_name);

            var request = new XMLHttpRequest();
            request.open('GET', lib_url.v, false);
            request.send(null);
            if (request.status === 200) {
                var data = request.responseText;
                console.log("SkPatcher.__import__ Loaded " + lib_url.v + "! Adding lib...");

                var file_data = lib_url.v.split(".");
                var type = file_data[file_data.length - 1];
                var file_name = "src/lib/" + lib_name.v + "." + type;
                Sk.builtinFiles.files[file_name] = data;
            } else {
                console.log("SkPatcher.__import__ Can't load " + lib_url.v + ".");
            }
        }
        console.log("SkPatcher.injectCustomImport Success to add __import__ function!");
    }

    console.log("SkPatcher Try to listen Sk.");
    waitForSkulpt();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址