Block all auto-focus on chatgpt.com; listen for postMessage and inject+send without stealing focus
目前為
// ==UserScript==
// @name ChatGPT No-Focus Injector
// @description Block all auto-focus on chatgpt.com; listen for postMessage and inject+send without stealing focus
// @match https://chatgpt.com/*
// @run-at document-start
// @version 0.0.1.20250512161945
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==
(function() {
'use strict';
// 1) Block every element’s .focus()
const nativeFocus = HTMLElement.prototype.focus;
HTMLElement.prototype.focus = function() {
// no-op: blocks ChatGPT’s auto-focus entirely
};
// 2) Grab the native setter for <textarea>.value
const valueSetter = Object.getOwnPropertyDescriptor(
HTMLTextAreaElement.prototype, 'value'
).set;
// 3) Listen for window.postMessage("your prompt")
window.addEventListener('message', event => {
if (typeof event.data !== 'string') return;
const text = event.data.trim();
if (!text) return;
// 4) Find the hidden React <textarea>
const ta = document.querySelector('textarea.text-token-text-primary');
if (!ta) return;
// 5) Inject via native setter (no focus needed)
valueSetter.call(ta, text);
ta.dispatchEvent(new InputEvent('input', { bubbles: true }));
// 6) Click Send
const sendBtn = document.getElementById('composer-submit-button');
if (sendBtn && !sendBtn.disabled) {
sendBtn.click();
}
});
})();