您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Listen for postMessage from parent, log to console, enter it into the chat input, and submit
当前为
// ==UserScript== // @name Minimal ChatGPT Message Logger + Injector + Submitter // @description Listen for postMessage from parent, log to console, enter it into the chat input, and submit // @match https://chatgpt.com/* // @version 0.0.1.20250521164324 // @namespace https://greasyfork.org/users/1435046 // ==/UserScript== (function () { 'use strict'; window.addEventListener('message', function (event) { // Handle search button clicks if (event.data && event.data.type === 'searchButtonClicked') { const searchBtn1 = document.querySelector('[data-testid="composer-button-search"]'); const searchButton2 = document.getElementById('system-hint-button'); if (searchBtn1) searchBtn1.click(); return; if (searchButton2) { const button = document.getElementById('system-hint-button'); button.focus(); // Sometimes needed to simulate a real user button.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true })); document.querySelector("#radix-«R4pbcp4mafacth95j5H1» > div > div:nth-of-type(2)").click() }; return; } if (event.data && event.data.type === 'reasonButtonClicked') { const reasonBtn = document.querySelector('[data-testid="composer-button-reason"]'); if (reasonBtn) reasonBtn.click(); return; } if (event.data && event.data.type === 'newChatButtonClicked') { // Click the "New chat" anchor link const newChatLink = document.querySelector('a[aria-label="New chat"][href="/"]'); if (newChatLink) newChatLink.click(); return; } if (event.data.type !== 'prompt') return; // Locate ProseMirror composer const composer = document.querySelector('.ProseMirror'); if (!composer) return; console.log('Injecting message:', event.data.content); // Focus and inject the text composer.focus(); const lines = event.data.content.split('\n'); const html = lines .map(line => `<p>${line .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>')}</p>`) .join(''); composer.innerHTML = html; composer.dispatchEvent(new InputEvent('input', { bubbles: true })); // Observe DOM changes until the send button is enabled const observer = new MutationObserver(function (mutations, obs) { const sendBtn = document.querySelector('[data-testid="send-button"]'); if (sendBtn && !sendBtn.disabled) { obs.disconnect(); console.log('Submitting message'); sendBtn.click(); } }); observer.observe(document, { childList: true, subtree: true, attributes: true, attributeFilter: ['disabled'] }); }); })();