PageSourceSearch

https://niceview.cn/static/front/scripts/gallery-view.js?v=20261001b

js niceview.cn collected 2026-10-02 13:54:30 UTC 2,903 bytes, 49 lines download raw bytes

1/*
2  映像点阅上报 —— **全站唯一一份**(§3-69,2026-08-03)
3
4  为什么要独立成档:
5    改造前这段逻辑只写在 taoyuan.js 里(三个景区子站用)。HP01 也要计数之后,
6    如果照抄一份就变成「端点路径、去重方式、sendBeacon 备援」各有两份 ——
7    典型的漂移出生点(canonical §10.5)。日后改端点只会改到其中一边,
8    而**另一边不会噴错、只是默默不再计数**。
9  ⇒ 一支档、一个 window.acmReportGalleryView,两边都呼叫它。
10  守门:`GalleryViewSingleSourceTest` 扫全部前台 JS,'/gallery/view' 只准出现在本档。
11
12  ── 计数口径(两站长得不一样,是刻意的)───────────────────────
13  · **三个景区子站**:`#main-splide` 是**一次一张**大图 ⇒ 触发=「切到这一张」。
14  · **HP01 官方首页**:`#gallery-splide` 是 `perPage:3` 的**卡片列,一次多张同时可见**
15    ⇒「切到 index」只指最左那张,用它计数会漏掉旁边两张,而且「看得到」≠「看了」。
16    ⇒ 触发=**点开放大**(业主 2026-08-03:「本来就官方首页有放大效果」)。
17      放大是使用者明确说「我要看这一则」,比任何自动判定都准。
18
19  ⚠ 两边共用的是**怎么上报**,不是**何时上报**。何时上报由各自的互动决定 ——
20    这不是不一致,是同一个语意(「使用者确实看了这一则」)在两种版型下的落法。
21
22  ── 实作注意 ──────────────────────────────────────────
23  · 同一次浏览同一则只打一次(本档 seen 表),跨浏览的去重交给後端(30 分钟窗)。
24  · 用 sendBeacon:页面切走时也送得出去、且不阻塞;不支援时 fallback fetch。
25  · 计数失败一律静默 —— 它不该影响浏览。
26  · 🔴 **不带 CSRF token**:front app 的中间件链**没有挂** CsrfCheck,而且挂上去这个端点
27    会直接坏掉(CsrfService 是 per-session,匿名访客 token 永远对不上 ⇒ 恒 403)。
28    理由完整写在 app/front/controller/Gallery.php 的档头,别在这里再写第二份。
29*/
30(function () {
31  var seen = {};
32
33  /**
34   * @param {string|number} vid 映像作品 id(由後台资料渲染进 data-vid,静态稿没有这个属性)
35   */
36  window.acmReportGalleryView = function (vid) {
37    if (!vid || seen[vid]) return;
38    seen[vid] = 1;
39    try {
40      var fd = new FormData();
41      fd.append('id', vid);
42      if (navigator.sendBeacon) {
43        navigator.sendBeacon('/gallery/view', fd);
44      } else {
45        fetch('/gallery/view', { method: 'POST', body: fd, credentials: 'same-origin' });
46      }
47    } catch (e) { /* 计数失败不影响浏览 */ }
48  };
49})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.