点击页面按钮获取JSON内容存入JavaScript变量且无下载提示的实现咨询
下载代码可用性说明
你提供的这段下载函数是完全可用的,这是前端原生实现文件导出的通用方案,只要将修改后的JSON序列化为字符串传入file参数,即可正常触发浏览器下载修改后的文件,无需额外依赖。
无弹窗获取原JSON内容的实现方案
该需求完全可以实现,根据页面按钮的实现逻辑不同,可选用对应的方案:
场景1:下载按钮绑定了公开的JSON文件地址/接口
这是最常见的情况,直接在扩展的内容脚本中定位目标按钮,提取对应的JSON资源地址后发起fetch请求即可,全程无弹窗:
// 替换为页面上下载按钮对应的选择器 const jsonDownloadBtn = document.querySelector('#download-json-btn'); const jsonSourceUrl = jsonDownloadBtn.href; // 直接请求获取原始JSON内容 fetch(jsonSourceUrl) .then(response => response.json()) .then(originJsonData => { // 此处可直接修改原始JSON内容 const modifiedData = Object.assign(originJsonData, { // 你的自定义修改逻辑 }); // 调用你提供的下载函数,导出修改后的文件 download('modified-data.json', JSON.stringify(modifiedData, null, 2)); })
场景2:按钮点击后由页面JS动态生成JSON、无公开接口
如果JSON是页面脚本动态生成、没有对外暴露请求地址,可直接在内容脚本中访问页面上下文的全局变量/函数:
- 先调试找到页面生成JSON的核心函数,直接调用该函数即可拿到原始JSON内容
- 如果找不到生成逻辑,也可以监听按钮点击事件,劫持页面的下载逻辑,在生成Blob/下载链接的阶段直接提取内容,不需要触发实际的下载弹窗。
兜底方案:使用扩展下载API拦截请求
如果以上方案都无法实现,你可以在扩展中声明downloads权限,使用chrome.downloadsAPI监听下载事件,当检测到JSON文件下载触发时,自动取消该下载并请求对应地址获取文件内容,全程在后台运行,不会给用户弹出提示。
注意事项
如果你使用的是Manifest V3版本的扩展,需要在manifest.json的host_permissions字段中添加目标站点的域名权限,避免跨域请求被拦截。
内容的提问来源于stack exchange,提问作者FCLM
相关产品推荐
相关产品推荐

