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

如何在网页中调用Tampermonkey用户脚本函数关闭当前标签页

解决方案

1. 修正Tampermonkey脚本配置与逻辑

你当前脚本的@grant none和@grant window.close配置存在冲突:@grant none会强制用户脚本运行在页面公共上下文,此时你申请的关闭权限不会生效,调用window.close和页面自身调用完全等价,必然触发安全限制报错。
删除@grant none配置,改用自定义事件监听页面的关闭请求,修改后脚本如下:

// ==UserScript==
// @name         Demo
// @namespace    http://tampermonkey.net/
// @match        *
// @grant        window.close
// @run-at       document-start
// ==/UserScript==

// 监听页面发送的自定义关闭事件
document.addEventListener('requestCloseTab', () => {
    // 此处调用的是Tampermonkey授予特权的window.close API,绕过普通页面的安全限制
    window.close();
})

可选安全优化:如果需要限制只有指定域名的页面能触发关闭操作,可以增加域名校验逻辑:

document.addEventListener('requestCloseTab', () => {
    // 替换为你允许触发关闭的域名
    if (window.location.hostname === 'example.com') {
        window.close();
    }
})

2. 调整网页侧调用逻辑

用户脚本运行在独立沙箱上下文时,页面无法直接访问脚本内定义的函数,改为通过触发自定义事件和脚本通信即可:

<html>
<body>
<script>
// 触发自定义事件,通知用户脚本执行关闭操作
document.dispatchEvent(new Event('requestCloseTab'));
</script>
</body>
</html>

核心原理

移除@grant none后,Tampermonkey会将脚本运行在独立的沙箱环境,你申请的window.close权限会作为特权API生效,该API调用的是浏览器扩展级别的权限,不会触发「脚本只能关闭自己打开的窗口」的普通页面安全限制。自定义事件是沙箱上下文和页面上下文之间通信的标准方案,不会破坏上下文隔离性,也能稳定传递操作指令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:03