ChatGPT Enter Fix (GPT4)

This Chrome/Safari extension addresses the issue where ChatGPT sends text even when the Enter key is pressed during Japanese conversion.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name       ChatGPT Enter Fix (GPT4)
// @name:ja       ChatGPT Enter Fix (GPT4)
// @namespace    http://tampermonkey.net/
// @description  This Chrome/Safari extension addresses the issue where ChatGPT sends text even when the Enter key is pressed during Japanese conversion.
// @description:ja  ChatGPTにおいて日本語IMEで変換中にEnterを押した時に送信されてしまうの問題を阻止します。 Safariにも対応。
// @version      2.0
// @author       satosh1suzuk1, d-engine
// @match      https://chat.openai.com/chat
// @match      https://chat.openai.com/chat/*
// ==/UserScript==

// wrap in anonymous scope to prevent confliction.
(() => {
  const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
  window.addEventListener("load", ()=> {
    const tryInject = () => {
      const textarea = document.querySelector('textarea[tabindex="0"]');
      if (!textarea) {
        return;
      }
      if(textarea.dataset.isInjected === 'true'){
        return;
      }
      textarea.dataset.isInjected = 'true';

      textarea.addEventListener(
        "keydown",
        (event) => {
          // SafariではisComposingが機能しない。 普通のEnterはkeyCodeが13に、IME確定のEnterは229になる
          if (
            (isSafari && event.keyCode === 229) ||
            (event.key === "Enter" && event.isComposing)
          ) {
            event.target.dataset.isComposing = 'true';
            event.stopPropagation();
          }
        },
        { capture: true }
      );
      textarea.addEventListener(
        "keyup",
        (event) => {
          if (event.key === "Enter" && event.target.dataset.isComposing === 'true') {
              event.stopPropagation();
          }
        },
        { capture: true }
      );
    }
    setInterval(tryInject, 1000);
  }, false);
})();