You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Edge/Chrome扩展无法覆盖DuelingBook的findCard函数问题求助

问题与解决方案

问题背景

DuelingBook(duelingbook.com)是一款游戏王沙盒游戏,部分隐藏功能在UI层面被锁定,持有指定卡牌时才能解锁。我制作了一款Edge扩展(兼容Chrome扩展机制),但多次迭代后仍无法覆盖原页面的findCard函数,无法解锁多数操作功能(仅保留了限制查看墓地的"Question"功能)。需求是制作一个能模拟在控制台执行指定脚本的扩展——该脚本在控制台中执行完全正常。

现有代码问题

当前扩展使用标准内容脚本,但内容脚本运行在隔离的执行环境中,无法直接访问页面的全局变量(如player1、player2),也无法覆盖页面本身的全局函数findCard,这就是脚本在控制台能正常运行但扩展中无效的核心原因。

修改后的扩展代码

manifest.json

调整为点击扩展图标时触发脚本注入,而非自动注入:

{
    "name": "DuelingCardUnlock",
    "action": {},
    "manifest_version": 3,
    "version": "0.1",
    "description": "Unlock DuelingBook functions by overriding findCard",
    "permissions": ["activeTab"],
    "background": {
        "service_worker": "background.js"
    }
}

background.js

用于监听扩展图标点击事件,将脚本注入到页面上下文:

chrome.action.onClicked.addListener((tab) => {
    chrome.scripting.executeScript({
        target: { tabId: tab.id },
        func: injectFindCardOverride
    });
});

function injectFindCardOverride() {
    // 覆盖页面全局的findCard函数
    window.findCard = function(arr, hand, grave, like) {
        var cards = [player1.m1, player1.m2, player1.m3, player1.m4, player1.m5, player1.s1, player1.s2, player1.s3, player1.s4, player1.s5, player1.pendulumLeft, player1.pendulumRight, player1.fieldSpell, player2.m1, player2.m2, player2.m3, player2.m4, player2.m5, player2.s1, player2.s2, player2.s3, player2.s4, player2.s5, player2.pendulumLeft, player2.pendulumRight, player2.fieldSpell, linkLeft, linkRight, player1.skillCard, player2.skillCard];
        if (hand) {
            for (var k = 0; k < player1.hand_arr.length; k++) {
                cards.push(player1.hand_arr[k]);
            }
        }
        if (grave) {
            for (k = 0; k < player1.grave_arr.length; k++) {
                cards.push(player1.grave_arr[k]);
            }
        }
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] == "Question") {
                for (var j = 0; j < cards.length; j++) {
                    if (cards[j]) {
                        if (cards[j].data("face_down")) {
                            continue;
                        }
                        if (((cards[j].data("cardfront").data("treated_as") == arr[i] || like && cards[j].data("cardfront").data("treated_as") && cards[j].data("cardfront").data("treated_as").indexOf(arr[i]) >= 0)) == false) {
                            return false;
                        }
                    }
                }
            }
        }
        return true;
    };
}

工作原理

  1. 点击扩展图标时,后台脚本通过chrome.scripting.executeScript将函数注入到当前页面的执行上下文,而非隔离的内容脚本环境。
  2. 注入的函数直接覆盖页面全局的window.findCard,完全模拟了在控制台执行脚本的效果,从而实现功能解锁。

内容的提问来源于stack exchange,提问作者Eyal282

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:45:51