王攀的ChatGpt

ChatGpt

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         王攀的ChatGpt
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  ChatGpt
// @author       wangpan
// @match        *://*/*
// @grant        none
// @license      MIT
// ==/UserScript==

// 此元数据用于描述用户脚本的信息,包括脚本名称、作者、版本等。

// @name:脚本的名称,将显示在用户脚本管理器中。
// @namespace:脚本的命名空间,用于标识脚本的唯一性。
// @version:脚本的版本号,用于跟踪脚本的更新。
// @description:脚本的简要描述,用于向用户解释脚本的功能。
// @author:脚本的作者,用于注明脚本的创建者。
// @match:脚本匹配的 URL 模式,用于指定脚本在哪些网站上运行。
// @grant:脚本需要的权限,用于指定脚本可以访问的浏览器功能。
// @license:脚本的许可证,用于指定脚本的使用条款。
// @downloadURL:脚本的下载 URL,用于提供脚本的更新。
// @updateURL:脚本的更新 URL,用于提供脚本的更新检查。

(function() {
    'use strict';

    // 定义一些变量
    let popupOpen = false;  // 标记弹出窗口是否打开
    let popupElement = null;  // 保存弹出窗口元素的引用

    // 创建聊天按钮
    function createChatButton() {
        // 创建一个按钮元素
        const chatButton = document.createElement('button');

        // 设置按钮的文本内容
        chatButton.textContent = 'Chat';

        // 设置按钮的样式
        chatButton.style.position = 'fixed';  // 固定定位
        chatButton.style.bottom = '20px';  // 距离底部 20px
        chatButton.style.right = '27px';  // 距离右侧 27px
        chatButton.style.width = '40px';  // 宽度为 40px
        chatButton.style.height = '22px';  // 高度为 20px
        chatButton.style.zIndex = '9999';  // 设置较高的 z-index 以确保按钮始终在最前面
        chatButton.style.padding = '10px';  // 设置按钮内边距
        chatButton.style.backgroundColor = '#007bff';  // 设置按钮背景色
        chatButton.style.color = 'white';  // 设置按钮文本颜色
        chatButton.style.border = 'none';  // 去除按钮边框
        chatButton.style.borderRadius = '5px';  // 设置按钮圆角
        chatButton.style.cursor = 'pointer';  // 设置按钮光标为指针
        chatButton.style.display = 'flex';  // 设置按钮为 flex 布局
        chatButton.style.justifyContent = 'center';  // 让按钮文字水平居中
        chatButton.style.alignItems = 'center';  // 让按钮文字垂直居中

        // 添加点击事件监听器
        chatButton.addEventListener('click', function() {
            // 如果弹出窗口已打开,则关闭它
            if (popupOpen) {
                document.body.removeChild(popupElement);
                popupOpen = false;
                popupElement = null;
            } else {
                // 如果弹出窗口未打开,则创建它
                createPopup();
                popupOpen = true;
            }
        });

        // 将按钮添加到页面中
        document.body.appendChild(chatButton);
    }

    // 创建弹出窗口
    function createPopup() {
        // 创建一个 div 元素作为弹出窗口
        const popup = document.createElement('div');

        // 设置弹出窗口的 ID
        popup.id = 'chatPopup';

        // 设置弹出窗口的样式
        popup.style.position = 'fixed';  // 固定定位
        popup.style.bottom = '20px';  // 距离底部 20px
        popup.style.right = '20px';  // 距离右侧 20px
        popup.style.width = '360px';  // 宽度为 360px
        popup.style.height = '650px';  // 高度为 650px
        popup.style.backgroundColor = '#f9f9f9';  // 设置背景色
        popup.style.border = '1px solid #ccc';  // 设置边框
        popup.style.borderRadius = '8px';  // 设置圆角
        popup.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.1)';  // 设置阴影
        popup.style.overflow = 'hidden';  // 隐藏溢出内容
        popup.style.zIndex = '999';  // 设置较高的 z-index 以确保弹出窗口始终在最前面

        // 创建一个 iframe 元素并将其添加到弹出窗口中
        const iframe = document.createElement('iframe');
        iframe.src = 'https://zhangrui.chat/#/chat';  // 设置 iframe 的源 URL
        iframe.style.width = '100%';  // 设置 iframe 的宽度
        iframe.style.height = '100%';  // 设置 iframe 的高度
        iframe.style.border = 'none';  // 去除 iframe 的边框
        popup.appendChild(iframe);

        // 将弹出窗口添加到页面中
        document.body.appendChild(popup);

        // 保存弹出窗口元素的引用
        popupElement = popup;
    }

    // 添加右键菜单
    document.addEventListener('contextmenu', function(e) {
        // 阻止默认右键菜单
        e.preventDefault();

        // 移除之前存在的右键菜单
        const existingContextMenu = document.getElementById('contextMenu');
        if (existingContextMenu) {
            document.body.removeChild(existingContextMenu);
        }

        // 创建一个 div 元素作为右键菜单
        const contextMenu = document.createElement('div');

        // 设置右键菜单的 ID
        contextMenu.id = 'contextMenu';

        // 设置右键菜单的样式
        contextMenu.style.position = 'fixed';  // 固定定位
        contextMenu.style.top = e.clientY + 'px';  // 设置距离鼠标光标顶部的位置
        contextMenu.style.left = e.clientX + 'px';  // 设置距离鼠标光标左边的位置
        contextMenu.style.backgroundColor = '#fff';  // 设置背景色
        contextMenu.style.border = '1px solid #ccc';  // 设置边框
        contextMenu.style.padding = '5px';  // 设置内边距
        contextMenu.style.zIndex = '9999';  // 设置较高的 z-index 以确保右键菜单始终在最前面

        // 根据弹出窗口是否打开,添加不同的选项
        if (popupOpen) {
            // 如果弹出窗口已打开,则添加关闭选项
            const closeChatOption = document.createElement('div');
            closeChatOption.textContent = '关闭 Chat';  // 设置选项文本
            closeChatOption.style.cursor = 'pointer';  // 设置光标为指针
            closeChatOption.addEventListener('click', function() {
                // 如果弹出窗口已打开,则关闭它
                if (popupOpen) {
                    document.body.removeChild(popupElement);
                    popupOpen = false;
                    popupElement = null;
                }
                // 移除右键菜单
                document.body.removeChild(contextMenu);
            });
            contextMenu.appendChild(closeChatOption);
        } else {
            // 如果弹出窗口未打开,则添加打开选项
            const openChatOption = document.createElement('div');
            openChatOption.textContent = '打开 Chat';  // 设置选项文本
            openChatOption.style.cursor = 'pointer';  // 设置光标为指针
            openChatOption.addEventListener('click', function() {
                // 如果弹出窗口未打开,则创建它
                if (!popupOpen) {
                    createPopup();
                    popupOpen = true;
                }
                // 移除右键菜单
                document.body.removeChild(contextMenu);
            });
            contextMenu.appendChild(openChatOption);
        }

        // 将右键菜单添加到页面中
        document.body.appendChild(contextMenu);
    });


    // 检查当前页面是否是 https://zhangrui.chat/#/chat,如果是则不创建聊天按钮
    if (!window.location.href.includes('https://zhangrui.chat/#/chat')) {
        createChatButton();
    }

})();