DeepSeek Native Setter Injector

Listens for postMessage events on chat.deepseek.com and logs them

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        DeepSeek Native Setter Injector
// @description  Listens for postMessage events on chat.deepseek.com and logs them
// @match       https://chat.deepseek.com/*
// @version 0.0.1.20250512140634
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

(function () {
  'use strict';

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

  window.addEventListener('message', event => {
    const message = event.data;

if (message && message.type === 'searchButtonClicked') {
  // find all primary filled buttons
  const buttons = document.querySelectorAll(
    'div[role="button"].ds-button--primary.ds-button--filled'
  );
  // click the one whose visible label is “Search”
  for (const btn of buttons) {
    if (btn.textContent.trim() === 'Search') {
      btn.click();
      break;
    }
  }
  return;
}

    const ta = document.getElementById('chat-input');
    if (!ta) return;

    // 1. Update both DOM and React state without shifting focus
    valueSetter.call(ta, message);

    // 2. Notify React/Vue/etc. of the change
    ta.dispatchEvent(new InputEvent('input', { bubbles: true }));

    // 3. Click the send button if enabled
    const sendBtn = document.querySelector('div[role="button"][aria-disabled="false"]');
    if (sendBtn) sendBtn.click();
  });
})();