应用截图
详细介绍
展示网页应用想要使用的 Project Fugu 🐡 API 的扩展程序。
工作原理
API 数据
不同 Project Fugu 🐡 API 的原始数据整理在电子表格中,然后转换为 JavaScript,因此更新 API 列表应该比较简单。
API 检测
扩展程序通过 chrome.webRequest.onBeforeRequest.addListener() API 监控页面发出的请求。然后,对按主框架、JavaScript 和 Web App Manifest 分类的响应正文使用一组正则表达式进行检测,例如 /navigator\.hid\.requestDevice\s*\(/g,以判断代码是否有可能使用了 Project Fugu 🐡 API。
浏览器支持检测
大多数 Project Fugu 🐡 API 可以通过检查接口或属性是否存在来轻松检测,例如 'BarcodeDetector' in window。其他 API 需要 ServiceWorkerRegistration,幸运的是,Manifest V3 扩展程序的弹出窗口使用 service worker,因此可以通过能在客户端或 service worker 中运行的 IIFE 使用它。例如 (async () => 'periodicSync' in (await navigator.serviceWorker?.ready || self.registration))()。
支持情况分为以下几类:
✔️ 您的浏览器支持。
🚫 您的浏览器不支持。
🤷 您的浏览器是否支持尚不明确。(只能通过识别用户代理才能知道。)
深层链接
扩展程序使用文本片段 URL 深层链接到检测到的 API 所在位置,例如 https://airhorner.com/scripts/main.min.js#:~:text=navigator.setAppBadge(。对于主框架文档,由于无法链接到 view-source: 协议链接,源代码会在由扩展程序控制的辅助 HTML 页面中呈现。
限制
• chrome.webRequest.onBeforeRequest.addListener() API 无法“看到”由 service worker 处理的请求(crbug.com/766433)。有三种可能的解决方法:
- 通过 ⌘/ctrl+shift+r 强制重新加载。
- 打开 DevTools,在 Application 标签页的 Service Worker 部分勾选 Bypass for network 复选框。
- 在 Application 标签页的 Storage 部分清除存储数据。
• 扩展程序只进行静态代码分析,因此无法保证应用实际使用了检测到 Project Fugu 🐡 API 的代码片段。
• 严重压缩的代码无法被检测到。例如,如果应用将 navigator.clipboard.write() 压缩为 const nav = navigator; nav.clipboard.write(),扩展程序将无法检测到它。
许可证
Apache 2.0。