Skip to main content

Module rel_path

Module rel_path 

Source
Expand description

HTML 属性の相対パス解決(純粋モジュール)。

resolve_dom_paths<img src> <script src> <link href> <video src> を書き換えるときに使う。

§触ってはいけない値がある

この関数は「パスらしきもの」だけを組み立て直す。 【2026-08-27 バグ修正】以前は判定が 「/ で始まる」か「:// を含む」だけで、次の 4 種が壊れていた。

  • data:image/png;base64,iVBORw0K... base64 は /含むsplit('/') で分解され、 .. に見える断片で pop() まで走る。画像が完全に壊れる。 インライン画像は実サイトでごく普通に使われる。
  • #about /dir/#about という存在しないパスになる。 同一ページ内の移動が「404」になって見える。
  • mailto: / tel: / javascript: /dir/mailto:someone@example.com になる。
  • //cdn.example.com/lib.js(プロトコル相対) / で始まるので現在ホストの絶対パスとして扱われ、 別ホストへ取りに行かない。url_resolve::resolve_url は こちらを正しく処理していたので、作法が食い違っていた。

§判定の基準

最初の / より前に : があればスキーム付きとみなす (data:mailto:https: など)。これは URL の一般規則で、 個別のスキーム名を並べるより漏れにくい。

Functions§

has_scheme
値がスキーム付き(data: mailto: https: など)か。
is_opaque
そのまま渡すべき値か(組み立て直してはいけない)。
resolve_relative_path
base_path(ディレクトリ。末尾 /)と rel_path を繋いで正規化する。