自動入力イベントはオリジン トライアル中です

公開日: 2026 年 6 月 10 日

フォームはウェブ上の頻繁なインタラクション ポイントですが、ユーザーにとってかなりの摩擦の原因となっています。ブラウザは、この煩わしさを軽減するために、以前から自動入力機能を提供しており、クレジット カード番号、住所、ログイン認証情報の入力などの繰り返し作業からユーザーを解放しています。

デベロッパーにとって、フォームの自動入力の処理は難しいものです。デベロッパーは <form> 要素で input イベントまたは change イベントをリッスンできますが、これらのイベントでは、フィールドにデータがどのように入力されたかはわかりません。このため、フォームが自動入力された瞬間にレイアウト調整などの特定のロジックをトリガーすることが難しくなります。新しい autofill イベント - Chrome オリジン トライアルとして利用可能に

Chrome 147 以降では、ブラウザが自動入力でユーザーをサポートしている場合に、デベロッパーに役立つシグナルを提供します。

autofill: inputchange で解決できなかった問題を解決する

input イベントと change イベントは、ユーザーがフォーム フィールドを手動で入力した場合と自動入力が使用された場合を区別しない汎用シグナルです。フォームの自動入力専用のイベントがないため、デベロッパーがフォームの入力に役立つ UI の更新を確実に行うことが難しくなっています。たとえば、ユーザーが居住国を指定すると、居住する州または地区を指定するフィールドが近くに表示されます。このフィールドは国によって異なります。自動入力リクエストに応じてこの更新をトリガーすると、デベロッパーにとっては予測しやすくなり、ユーザーにとっては便利になります。autofill イベントはこの問題を解決します。

autofill イベントは、ブラウザがフォームを自動入力する直前に実行されます。イベントのリスナーは、入力される autofillValues の配列と refill 関数を受け取ります。たとえば、リスナーがコンテンツを変更した場合、リスナーは refill 関数を呼び出して、ブラウザにフォームの再入力を行うようリクエストできます。次のフォーム マークアップの例を見てみましょう。

<form>
  <div>
    <label for="country">Country</label>
    <select id="country" name="country" autocomplete="country">
      <!-- ... -->
    </select>
  </div>
  <div>
    <label for="address-line-1">Address Line 1</label>
    <input type="text" name="address-line-1" id="address-line-1" autocomplete="address-line1">
  </div>
  <div>
    <label for="city">City</label>
    <input type="text" name="city" id="city" autocomplete="address-level2">
  </div>
  <div>
    <div class="state">
      <!-- This section gets populated based on the
           value provided in the country field -->
    </div>
  </div>
  <div>
    <input type="submit" value="Calculate">
  </div>
</form>

この JavaScript は、documentautofill イベントをバインドします。

document.addEventListener('autofill', async event => {
  // A null check here is a good idea, as
  // refills are not available in a WebView.
  if (event.refill == null) {
    /* Apply legacy logic */
    return;
  }

  // Walk the fields
  for (const {field, value} of event.autofillValues) {
    if (field.name === 'country') {
      if (value === 'Germany') {
        document.querySelector('.state').innerHTML = `
        <label for="state">State:</label>
        <select name="state" id="state" autocomplete="address-level1">
          <option selected="selected"></option>
          <option value="BW">Baden-Württemberg</option>
          <option value="BY">Bavaria</option>
          <!-- Other states omitted -->
        </select>
      `;
      } else {
        /* Logic for other countries */
      }
    }
  }

  await event.refill();
});

この例は一般的な住所フォームです。ユーザーがフォーム フィールドをクリックまたはタップすると、自動入力のツールチップがトリガーされます。自動入力された住所が選択されると、次のようになります。

  1. autofill イベント ハンドラは、フォーム フィールドが自動入力される直前に実行されます。
  2. event.autofillValues は、2 つのプロパティを持つオブジェクトで提案された自動入力データを提供します。
    • field: 自動入力する DOM 要素への参照。
    • value: フィールドの自動入力候補値。
  3. 国フィールド名が検出されると、ロジックによって国(この例ではドイツ)が検出され、国の適切な選択肢が州のプルダウンに入力されます。
  4. event.refill() が呼び出され、ブラウザにフォームの再入力が指示されます。これにより、変更されたフォームで自動入力アクションが繰り返されます。

より複雑な autofill ユースケースに関心がある場合は、Shopify の Yoav Weiss が作成した 2 つのデモをご覧ください。

  1. この投稿の例に似た個人情報フォーム。ただし、autofill イベントの基本的なデモにとどまりません。
  2. autofill イベントを使用してカード発行会社を検出し、リッチなビジュアルで DOM を大幅に更新するクレジット カードの自動入力のデモ

クレジット カードの自動入力のデモは、autofill イベントの機能を示しています。このようなエクスペリエンスは autofill イベントの前から可能でしたが、フォームの自動入力専用のイベントがあることで、デベロッパー エクスペリエンスが向上します。

autofill イベントと :autofill CSS 疑似クラス

:autofill CSS 疑似クラスは自動入力されたフォーム要素と一致し、autofill イベントはそれを補完できます。

たとえば、:autofill を使用して、自動入力されたばかりのフィールドと autofill イベント中に変更されたフィールドを区別できます。これは、フィールドが事前入力されたことをユーザーに知らせるのに役立つシグナルとなりますが、編集可能なフォーム コントロールにデータが存在することで、必要に応じて変更できることをユーザーに知らせます。

document.addEventListener('autofill', async event => {
  if (event.refill !== null) {
    // Walk the fields to be autofilled:
    for (const {field, value} of event.autofillValues) {
      let cardIssuer;

      // If this field is the credit card number,
      // use its value to get the card issuer.
      if (field.name === 'card-number') {
        cardIssuer = getCardIssuerFromNumber(value);
      }

      // Populate the card issuer field with
      // the data we got from the card number
      if (field.name === 'card-issuer') {
        field.value = cardIssuer;
        field.classList.add('modified-by-event');
      }
    }
  }
});

前のコードブロックでは、クレジット カード番号フィールドが見つかるまで、自動入力されたフィールドがウォークされます。フィールド内のデータは、カードの発行元を取得するために使用されます。取得された発行元はフィールドに入力され、.modified-by-event のクラスが割り当てられます。このフィールドの自動入力のスタイルを調整して、autofill イベントで変更されていない他の自動入力フィールドと区別できます。

/* Standard autofill style: */
input:autofill {
  border: 0.25rem solid #cc0;
}

/* Autofill style for `autofill` event-modified data: */
input.modified-by-event-autofill:autofill {
  border-color: #0cc;
}

これにより、自動入力されたフォーム フィールドのスタイルのセマンティクスを保持し、:autofill スタイルを継承しながら、フォーム フィールドが自動入力されたことをユーザーに明確に伝えることができます。

autofill イベントと field-sizing CSS プロパティ

field-sizing CSS プロパティの値が content の場合、<textarea> 要素などのフィールドは、コンテンツに合わせて自動的にサイズ変更されます。これにより、小さなフィールドで不自然なスクロールバーが表示されるのを防ぐことができます。

textarea {
  /* The field grows to fit the content automatically: */
  field-sizing: content;
  min-height: 3lh;
  transition: min-height 0.2s ease-out;
}

ユーザー エクスペリエンスの観点からは望ましいですが、レイアウト シフトの原因になる可能性があります。ユーザーが入力すると、入力フィールドが徐々に拡大します。ただし、ブラウザが複数行の住所を <textarea> 要素に自動入力すると、フィールドが瞬時に大幅に拡大する可能性があります。autofill イベントを使用すると、コンテナをアニメーション化したり、スクロール位置を調整してユーザーがコンテキストを失わないようにするなど、これらのトランジションをより効果的に管理できます。

document.addEventListener('autofill', event => {
  // Assumes a single field for the purpose of a quick
  // demonstration, such as a multiline address field:
  const [addressDetails] = event.autofillValues;

  // Since field-sizing: content causes an immediate jump,
  // we can use the event to ensure the UI remains stable:
  requestAnimationFrame(() => {
    addressDetails.scrollIntoView({behavior: 'smooth', block: 'nearest'});
  });

  if (event.refill !== null) {
    await event.refill();
  }
});

アプリケーションの要件はそれぞれ異なるため、このパターンを使用する価値があるかどうかを判断する必要があります。ただし、これは CSS と autofill イベントの組み合わせで実現できることを示す例です。

フォームの自動入力の検出と測定

フォームの自動入力の分析データはビジネスにとって価値がありますが、既存のウェブ機能ではフォームの自動入力を測定することは困難です。たとえば、Baseline ではない CSS :autofill 疑似クラスに依存するプラクティスがあります。

autofill イベントは、フォームの自動入力を検出するツールです。イベントは実際の自動入力の試行でのみ発生し、入力では発生しません。また、event.autofillValues プロパティには自動入力されたフィールドのみが含まれるため、自動入力されたデータを追跡できます。

document.addEventListener('autofill', event => {
  // Get autofilled data
  const autofillData = {
    // Assumes the form has an ID for simplicity:
    form: event.target.id,
    autofilled: true
  };

  // Send to analytics endpoint
  const body = JSON.stringify(autofillData);
  navigator.sendBeacon('/analytics', body);
});

この例は簡略化されていますが、この情報を取得する方がはるかに簡単であることがわかります。実装が難しく信頼性の低い回避策を使用することなく、自分に合った方法で自動入力の分析データを構造化して収集できます。

オリジン トライアルに登録する

autofill イベントは Chrome オリジン トライアルに含まれており、ご参加いただくことで Chrome の改善に役立ちます。オリジン トライアルでは、API がウェブ プラットフォームの一部になる前に、実際のユーザーを対象に試験運用機能をテストし、Chrome チームにフィードバックを提供できます。

サイトで autofill イベントの使用を開始するには、こちらからオリジン トライアルに登録してください。Chrome は、皆様がこの機能をどのように活用し、それが改善の機会を見つけるうえでどのように役立つかを楽しみにしています。