ChatGPT Native Injector (No Focus)

Inject postMessage into ChatGPT without stealing focus

目前為 2025-05-12 提交的版本,檢視 最新版本

// ==UserScript==
// @name         ChatGPT Native Injector (No Focus)
// @description  Inject postMessage into ChatGPT without stealing focus
// @match        https://chatgpt.com/*
// @version 0.0.1.20250512162359
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

(function() {
  'use strict';

  // 1. Cache the native setter for .value
  const valueSetter = Object.getOwnPropertyDescriptor(
    HTMLTextAreaElement.prototype, 'value'
  ).set;

  window.addEventListener('message', event => {
    if (typeof event.data !== 'string') return;
    const text = event.data.trim();
    if (!text) return;

    // 2. Find ChatGPT’s hidden textarea (it mirrors the ProseMirror editor)
    const ta = document.querySelector('textarea.text-token-text-primary');
    if (!ta) return;

    // 3. Update its value without focusing
    valueSetter.call(ta, text);
    ta.dispatchEvent(new InputEvent('input', { bubbles: true }));

    // 4. Click Send if available
    const sendBtn = document.getElementById('composer-submit-button');
    if (sendBtn && !sendBtn.disabled) {
      sendBtn.click();
    }
  });
})();