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

技术问询:当指定div/span数值超$100时通过扩展播放音频

当然可行!

这种需求完全可以通过浏览器扩展实现,毕竟扩展的核心能力之一就是干预页面DOM元素和行为,刚好匹配你的场景——监控奖金池数值并触发音效。

下面给你拆解具体的实现思路和步骤,都是实操性很强的内容:

核心逻辑

简单来说就是三步:

  • 用内容脚本(扩展里的一种脚本,能直接访问目标页面的DOM)注入到你要监控的网站
  • 实时或定期检查目标div/span里的数值
  • 一旦数值超过$100,立刻播放你准备好的“ka-shing”音效

具体实现步骤

1. 先搭好扩展的基础文件结构

你只需要准备几个简单的文件,放在同一个文件夹里就行:

  • manifest.json:扩展的“身份证”,用来告诉浏览器这个扩展的权限、要注入的脚本等信息
  • content.js:核心逻辑脚本,负责监控数值和播放音效
  • 音效文件(比如cash.mp3):把你想要的“ka-shing”音效下载好,放到这个文件夹里

2. 编写manifest.json配置文件

现在主流浏览器用的是Manifest V3标准,我给你写个示例,你只需要替换里面的网站域名就行:

{
  "manifest_version": 3,
  "name": "Jackpot Cash Sound",
  "version": "1.0",
  "description": "Plays a sound when jackpot exceeds $100",
  "content_scripts": [
    {
      "matches": ["*://你的目标网站域名/*"], // 比如换成*://example.com/*
      "js": ["content.js"],
      "run_at": "document_end"
    }
  ],
  "web_accessible_resources": [
    {
      "resources": ["cash.mp3"],
      "matches": ["*://你的目标网站域名/*"]
    }
  ]
}

这里的web_accessible_resources是为了让目标页面能访问扩展里的音效文件,不然浏览器会阻止跨源访问。

3. 编写核心脚本content.js

这里有两种实现方式,你可以根据自己的场景选:

方式一:定时轮询(适合已知每2分钟更新一次的场景)

因为你说奖金池每2分钟更新一次,所以不用实时监听,每隔30秒检查一次就够了,简单又省心:

let hasPlayed = false; // 避免重复播放,比如数值一直超过100时不会反复响

function checkJackpotValue() {
  // 替换成你要监控的div/span的选择器,比如'.jackpot-amount'
  const jackpotElement = document.querySelector('你的目标元素选择器');
  if (!jackpotElement) return;

  // 提取数值:去掉$、逗号这些非数字字符,转成数字
  const currentValue = parseFloat(jackpotElement.textContent.replace(/[^0-9.]/g, ''));
  
  if (currentValue > 100 && !hasPlayed) {
    playCashSound();
    hasPlayed = true;
    // 如果你希望每次数值从低于100涨到超过100都响,可以去掉hasPlayed,或者改成当数值从<=100跳到>100时重置标记
  }
}

function playCashSound() {
  // 获取扩展里的音效文件地址
  const audioUrl = chrome.runtime.getURL('cash.mp3');
  const audio = new Audio(audioUrl);
  // 播放音效,捕获可能的错误(比如浏览器阻止自动播放)
  audio.play().catch(err => console.error('音效播放失败:', err));
}

// 页面加载完成后先检查一次
checkJackpotValue();
// 每30秒检查一次
setInterval(checkJackpotValue, 30000);

方式二:MutationObserver监听(更高效)

如果页面的奖金池数值更新时会直接修改DOM内容,用这个方式可以实时捕捉变化,不用定时轮询:

let hasPlayed = false;

function playCashSound() {
  const audioUrl = chrome.runtime.getURL('cash.mp3');
  const audio = new Audio(audioUrl);
  audio.play().catch(err => console.error('音效播放失败:', err));
}

function startObserving() {
  const jackpotElement = document.querySelector('你的目标元素选择器');
  if (!jackpotElement) {
    // 如果页面加载时元素还没渲染出来,延迟2秒再尝试
    setTimeout(startObserving, 2000);
    return;
  }

  // 先检查初始数值
  const initialValue = parseFloat(jackpotElement.textContent.replace(/[^0-9.]/g, ''));
  if (initialValue > 100) {
    playCashSound();
    hasPlayed = true;
  }

  // 创建DOM观察者,监听元素内容变化
  const observer = new MutationObserver((mutations) => {
    mutations.forEach(mutation => {
      // 当元素内容变化时,重新检查数值
      if (mutation.type === 'childList' || mutation.type === 'characterData') {
        const newValue = parseFloat(jackpotElement.textContent.replace(/[^0-9.]/g, ''));
        if (newValue > 100 && !hasPlayed) {
          playCashSound();
          hasPlayed = true;
        }
      }
    });
  });

  // 配置观察选项:监听子元素变化、文本内容变化
  observer.observe(jackpotElement, {
    childList: true,
    characterData: true,
    subtree: true
  });
}

// 启动监听
startObserving();

4. 安装并测试扩展

  • 打开Chrome(或Edge等基于Chromium的浏览器),输入chrome://extensions/进入扩展管理页面
  • 开启右上角的“开发者模式”
  • 点击“加载已解压的扩展程序”,选择你刚才创建的文件夹就行
  • 打开目标网站,测试奖金池数值超过100时会不会播放音效

几个注意点

  • 一定要替换代码里的目标网站域名和元素选择器:你可以用浏览器的开发者工具(F12),找到奖金池的元素,右键复制它的选择器
  • 浏览器可能会阻止自动播放音频:这是安全策略,需要用户先和页面交互(比如点击一下页面)才能播放,所以第一次可能需要手动点一下页面
  • 如果需要反复触发音效(比如奖金池降到100以下又涨回去),可以修改hasPlayed的逻辑,比如当数值<=100时重置hasPlayed = false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:16