残高表示 読取テスト v0.2.0 — 非公式・個人用、再審査準備版 状態 同一のpaypay-reader-testプロジェクトへ反映する修正版。配布・インストール案内は保留。Cloudflareの警告解除や誤判定確定はしていない。 本版の再審査申請はユーザー確認前に送信しない。 実機テスト・85台展開・スプレッドシート送信は行わない。 Yahoo! JAPAN・PayPayの公式サービスではなく、両社と提携していない。 3ファイル index.html: 中立的な説明とレビュー用ソースリンク。インストール誘導なし。 paypay-reader.user.js: v0.2.0読取スクリプト。 README.txt: 本書。 読取仕様 URLはhttps://paypay.yahoo.co.jp/balance(末尾スラッシュも可)のトップフレームのみ。 ページ全体のinnerText/textContent、全本文の再帰連結・キャッシュを使わない。 認証情報・Cookie・フォーム入力値・ストレージを読むAPIは使わない。 認識可能なDOM契約(実際のYahoo! DOMがこの構造かは未確認): 1. aria-labelが「PayPay残高」または「PayPayポイント」と完全一致する h1〜h6、またはrole="heading"の要素が、それぞれ可視状態で1つだけ存在する。 見出し本文の文字列を検索・取得しない。構造と対象ラベル属性で識別する。 2. 見出しには一意のidがあり、親はsection/div/li/articleで子要素6つ以内。 3. 同じ親の直下に、aria-labelledbyがそのidと完全一致する値要素が1つだけある。 4. 値要素内はdiv/p/span/output/strong/b/smallだけ。深さ2以下、要素8以下、 テキストノード8以下、取得文字数合計48以下。フォーム、入力欄、リンク、 編集可能領域などの配下は対象外。構造を先に確認し、その後だけ値の文字を読む。 5. 値全体が整数+円/ptに完全一致する場合だけ採用する。 失効日・内訳・説明文・複数値が混在する要素は採用しない。 例(模擬DOM。Yahoo!が実際にこの構造だという意味ではない):

PayPay残高

18,600円

対応できない場合 全本文検索、隣接する無関係な本文の探索、bodyへのフォールバックをしない。 最大30秒で取得失敗を表示。失敗を0円/0ptにしない。 実画面がこの関連付けを持たない場合は失敗するのが意図した動作。 将来の対応拡張は、機密情報を除いた対象2領域の構造確認後に限定して行う。 ラベルをDOM属性だけで特定できないページについて、無関係な文字を一切読まずに 汎用的な本文検索も行うことはできないため、互換性より範囲制限を優先する。 保証の範囲 関連付けられた値要素内に別の文字が誤って入っていた場合、その文字は検証のため 一時的に読まれ得る(数値として採用はしない)。DOMの意味の正しさは事前確認が必要。 「どんなページ構造でも他の文字を絶対に読まない」とは主張しない。 現在の契約では、対象値要素外の本文テキスト・フォーム値は参照しない。 スクリプトは送信・永続保存・ログ出力なし。読み取った結果を画面内に表示するだけ。 配布ページのCSPは配布HTMLにのみ適用され、Userscriptsの権限を制限するものではない。 @grant none自体も通信禁止の保証ではない。外部送信がないことはソース監査で確認する。 再開条件 ユーザーによる修正版と申請文の確認、Cloudflareの正規レビュー、 実DOM対応の確認後にiPhone 1台で実測値との完全一致を確認する。 同じプロジェクトへ修正版を反映する。別ドメインは発行せず、レビューはユーザーの最終確認後に申請する。