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.20250526024910
// @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) {
searchButton2.focus(); // Sometimes needed to simulate a real user
searchButton2.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true }));
document.querySelector('[id^="radix-"] > div > div:nth-of-type(2)').click()
};
return;
}
if (event.data && event.data.type === 'reasonButtonClicked') {
const reasonBtn1 = document.querySelector('[data-testid="composer-button-reason"]');
const reasonButton2 = document.getElementById('system-hint-button');
if (reasonBtn1) reasonBtn1.click();
if (reasonButton2) {
reasonButton2.focus(); // Sometimes needed to simulate a real user
reasonButton2.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true }));
document.querySelector('[id^="radix-"] > div > div:nth-of-type(5)').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']
});
});
})();