How Fugu is the Web?

An extension to shine light on the Project Fugu 🐡 APIs web apps want to use.

How Fugu is the Web?란 무엇입니까?

How Fugu is the Web?은(는) Thomas Steiner에 의해 개발된 Chrome 확장 프로그램으로, 주요 기능은 "An extension to shine light on the Project Fugu 🐡 APIs web apps want to use."입니다.

확장 프로그램 스크린샷

screenshot
screenshot
screenshot
screenshot

How Fugu is the Web? 확장 프로그램 CRX 파일 다운로드

크롬 확장 프로그램을 crx 형식으로 다운로드하여 브라우저에 수동으로 설치하거나 crx 파일을 친구들과 공유하여 쉽게 크롬 확장 프로그램을 설치하세요.

확장 프로그램 사용 설명서

                        How it works

API data

The raw data for the different Project Fugu 🐡 APIs is curated in a spreadsheet, which is then turned into JavaScript, so keeping the list of APIs updated is hopefully a straightforward task.

API detection

The extension monitors the requests a page makes via the chrome.webRequest.onBeforeRequest.addListener() API. Each response body, grouped by main frame, JavaScript, and Web App Manifest response bodies, is then run through a set of regular expressions like /navigator\.hid\.requestDevice\s*\(/g to determine if the code hints at a Project Fugu 🐡 API potentially being used.

Browser support detection

Most Project Fugu 🐡 APIs are easily feature-detectable by checking for the existence of interfaces or properties, for example, as in 'BarcodeDetector' in window. Other APIs require a ServiceWorkerRegistration, but luckily the popup window in Manifest V3 extensions uses a service worker, so it can be used via an IIFE that can be run in the client or the service worker. An example is (async () => 'periodicSync' in (await navigator.serviceWorker?.ready || self.registration))().

The support categories are listed below:

✔️ Supported by your browser.
🚫 Not supported by your browser.
🤷 Support unknown for your browser. (The only way to know would be user-agent sniffing.)

Deep-linking

The extension makes use of Text Fragment URLs to deep-link to the occurrence of a detected API, for example https://airhorner.com/scripts/main.min.js#:~:text=navigator.setAppBadge(. For main frame documents, the source code gets rendered in a helper HTML page controlled by the extension, since it is impossible to link to view-source: protocol links.

Limitations

• The chrome.webRequest.onBeforeRequest.addListener() API unfortunately does not "see" requests that are handled by a service worker (crbug.com/766433). There are three possible workarounds for this:
  - Hard-reload via ⌘/ctrl+shift+r.
  - Open DevTools and check the Bypass for network checkbox in the Service Worker section of the Application tab.
  - Clear storage in the Storage section of the Application tab.
• The extension only does static code analysis, that is, there is no guarantee that the app actually uses the code snippet where a Project Fugu 🐡 API was detected.
• Heavily minified code will not be detected. For example, if an app minifies navigator.clipboard.write() to const nav = navigator; nav.clipboard.write(), the extension will not detect this.

License

Apache 2.0.                    

확장 프로그램 기본 정보

이름 How Fugu is the Web? How Fugu is the Web?
ID apcghpabklkjjgpfoplnglnjghonjhdl
공식 URL https://chromewebstore.google.com/detail/how-fugu-is-the-web/apcghpabklkjjgpfoplnglnjghonjhdl
설명 An extension to shine light on the Project Fugu 🐡 APIs web apps want to use.
파일 크기 125 KB
설치 횟수 78
현재 버전 1.17.0
최근 업데이트 2024-01-10
출시 날짜 2021-06-23
개발자 Thomas Steiner
이메일 [email protected]
결제 유형 free
확장 프로그램 웹 사이트 https://github.com/tomayac/project-fugu-api-detector
도움말 페이지 URL https://github.com/tomayac/project-fugu-api-detector/issues
개인정보 보호 정책 페이지 URL https://raw.githubusercontent.com/tomayac/blogccasion/master/privacy-policy.txt
지원되는 언어 en
manifest.json
{
    "update_url": "https:\/\/clients2.google.com\/service\/update2\/crx",
    "name": "__MSG_extName__",
    "description": "__MSG_extDescription__",
    "version": "1.17.0",
    "default_locale": "en",
    "manifest_version": 3,
    "background": {
        "service_worker": "background.js"
    },
    "permissions": [
        "activeTab",
        "webRequest",
        "webNavigation"
    ],
    "host_permissions": [
        "https:\/\/*\/*"
    ],
    "action": {
        "default_popup": "popup.html",
        "default_icon": {
            "320": ".\/assets\/blowfish.png"
        },
        "default_title": "__MSG_noAPIsDetected__"
    },
    "content_scripts": [
        {
            "js": [
                "contentInject.js"
            ],
            "matches": [
                ""
            ],
            "run_at": "document_start"
        }
    ],
    "icons": {
        "320": ".\/assets\/blowfish.png"
    }
}