Listens for postMessage events and injects them into chat.mistral.ai's input field
当前为
// ==UserScript==
// @name Mistral Chat Prompt Injector
// @description Listens for postMessage events and injects them into chat.mistral.ai's input field
// @match https://chat.mistral.ai/*
// @run-at document-idle
// @version 0.0.1.20250521151018
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==
(function () {
window.addEventListener('message', event => {
if (event.data?.type === 'newChatButtonClicked') {
document.querySelector('button[aria-label="New chat"]').click();
return;
}
if (event.data.type === "prompt" && event.data.content.trim()) {
const textarea = document.querySelector('textarea[name="message.text"]');
if (textarea) {
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
nativeInputValueSetter.call(textarea, event.data.content); // Set like the browser would
// Now trigger a React-compatible InputEvent
const inputEvent = new InputEvent('input', {
bubbles: true,
cancelable: true,
inputType: 'insertText',
data: event.data.content,
});
textarea.dispatchEvent(inputEvent);
document.querySelector('button[type="submit"]').click();
const submitButton = document.querySelector('button[type="submit"]');
if (submitButton) {
const observer = new MutationObserver(() => {
if (!submitButton.disabled && submitButton.getAttribute('aria-disabled') !== 'true') {
submitButton.click();
observer.disconnect();
}
});
observer.observe(submitButton, {
attributes: true,
attributeFilter: ['disabled', 'aria-disabled']
});
}
}
}
});
})();