Skip to content

Frontend: the device test cannot see a blocker that stops the plugin's own scripts #2062

Closed

Description

@rpgmem

Problem

The device test (/valid/?ffc_device_check=1) does not report several ways a content blocker, an optimizer or a firewall stops the plugin:

  • The test itself does not run. A blocker, or a broken combined file (as the LiteSpeed case in Frontend: LiteSpeed's minifier cuts a regex in half and stops every combined script for visitors #2056), leaves every row at "Checking…" with no explanation.
  • The device-ID collector is blocked. Tracker lists block the fingerprint library (uBlock with EasyPrivacy, Brave Shields, Firefox strict mode). The row then says "not available" as if the browser lacked something.
  • The captcha only reports support. The row says whether the browser supports what the captcha needs, not whether the widget's script loaded.
  • Requests to the server are never tried. Nothing checks that admin-ajax.php, the path every form submits through, answers.
  • The copied results lack context. They do not say which plugin version or which settings the page ran with.

Acceptance criteria

  • A notice rendered in the page, revealed by CSS after a delay and cancelled by the script when it starts, says the test could not run and why that may be. A <noscript> message covers JavaScript turned off.
  • The device-ID row says the collector was blocked when the page asked for it and it did not load.
  • The captcha row says when the captcha's script did not load on a page that uses it.
  • A new "Server requests" row calls admin-ajax.php and shows OK with the response time, or that the request was blocked or failed.
  • "Copy the results" adds the plugin version and the relevant settings: captcha mode, device limit, location on forms.
  • If simple, a notice when the page's script is older than the plugin, which means it was served from a cache.
  • Tests, the three catalogues, docs and the CHANGELOG are updated.

Activity

  1. rpgmem commented on Oct 24, 2026

    @rpgmem
    OwnerAuthor

    Delivered in #2063 (merged to develop):

    • Server requests row: an empty POST to admin-ajax.php, reported as reached (with ms), refused (status code) or blocked, each with its fix.
    • Device ID: a collector missing where the browser could run it is reported as stopped by a blocker.
    • Captcha: with ALTCHA (altcha / both) the page loads the forms' bundle and fails the row when the widget never defined itself.
    • Test's own scripts stopped: a notice the stylesheet reveals after a delay, cancelled when the script starts, shown at once when a script it needs is missing. The <noscript> message uses the shared notice component.
    • Copy the results: adds the plugin version, the captcha mode and whether the device limit is on.
    • Also agreed during the work: a verdict above the rows, location permission and precision merged into one row, rows grouped by subject with the PDF last.
    • Deferred: the stale-JS-cache notice. Detecting it reliably needs the server to report its version through a new endpoint, which was not simple enough for this change.

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions