Facebook に続いて Gemini でも日本語入力時の変換確定操作の Enter で送信されるようになってしまい、これは本格的に変換入力圏がハブられ始めたなと思い、自分でなんとかしてみました。(Gemini に相談です。)以下、解決のための対策です。ブラウザはSafari を想定しており、Gemini と Facebookのサイトでだけ動作するようにしています。
1.Safariに Mac App Storeから「Userscripts」という機能拡張を入れる。
2.機能拡張をONすると、SafariのURL入力欄の左に「</>」マークが表示されるので、そこをクリックして「Open Extention Page」をクリックして、以下のコード(JS)を貼り付ける。
// ==UserScript==
// @name Gemini & Facebook Perfect Enter Fix
// @namespace http://tampermonkey.net/
// @version 1.2
// @description 変換中のEnterは確定のみ、確定後のEnter空打ちで送信する挙動を完全再現します
// @author You
// @match https://gemini.google.com/*
// @match https://www.facebook.com/*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// いま日本語の「変換中(未確定)」かどうかを記録するフラグ
let isComposing = false;
// 変換が始まったらフラグをON
window.addEventListener('compositionstart', function() {
isComposing = true;
}, true);
// 変換が確定(終了)したらフラグをOFF
window.addEventListener('compositionend', function() {
// 一瞬だけ判定を遅らせて、Enterキーの沈み込みと同期させる
setTimeout(() => { isComposing = false; }, 10);
}, true);
window.addEventListener('keydown', function(e) {
const isInput = e.target.tagName === 'TEXTAREA' ||
e.target.tagName === 'INPUT' ||
e.target.getAttribute('contenteditable') === 'true' ||
e.target.closest('[role="textbox"]');
if (!isInput) return;
// Enterキー以外の操作はすべてスルー
if (e.key !== 'Enter') return;
// 1. 日本語の「変換中」のEnterは、文字の確定だけ。送信イベントは絶対に阻止
if (isComposing || e.isComposing || e.keyCode === 229) {
e.stopPropagation();
return;
}
// 2. 完全に文字が「確定した後」のEnter空打ち
// 修飾キー(ShiftやOptなど)が押されていない、純粋なEnter単体ならそのまま通す(=送信される)
if (!e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey) {
// ここでは stopPropagation をあえて呼ばず、サイト本来の「Enter送信」をそのまま発火させます
}
}, true); // キャプチャリングで確実に先回り
})();
これで昔のような使い勝手になると思います。

コメント