打开登录页面并在特定URL时弹出提示,提示用户打开开发者工具,点击任意处关闭弹窗或等待倒计时自动关闭。弹窗只出现一次,并保留登录按钮。
// ==UserScript==// @name 手动获取ChatGPT RT// @namespace http://tampermonkey.net/// @version 3.2// @description 打开登录页面并在特定URL时弹出提示,提示用户打开开发者工具,点击任意处关闭弹窗或等待倒计时自动关闭。弹窗只出现一次,并保留登录按钮。// @author XYHELPER// @match *://*/*// @grant GM_xmlhttpRequest// @license ChatGPT4V// @grant GM_openInTab// @grant GM_registerMenuCommand// @grant window.close// @connect login.closeai.biz// ==/UserScript==(function() {'use strict';let hasShownPopup = false; // 用于确保弹窗只显示一次// 创建弹窗function createPopup() {const modal = document.createElement('div');modal.style.position = 'fixed';modal.style.top = '35%'; // 垂直居中modal.style.left = '50%'; // 水平居中modal.style.transform = 'translate(-50%, -50%)'; // 中心偏移modal.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';modal.style.color = 'white';modal.style.padding = '15px';modal.style.borderRadius = '8px';modal.style.zIndex = '10000';modal.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.5)';modal.style.cursor = 'pointer';modal.style.maxWidth = '80%'; // 最大宽度,确保在小屏幕下也能显示完整// 添加提示文本const tipText = document.createElement('p');tipText.textContent = '请按F12 获取返回参数';tipText.style.fontSize = '14px';tipText.style.color = 'rgba(255, 255, 255, 0.9)';tipText.style.margin = '0';modal.appendChild(tipText);// 将弹窗添加到页面中document.body.appendChild(modal);// 创建点击外部关闭弹窗的功能function handleOutsideClick(event) {if (!modal.contains(event.target)) {closeModal();}}// 关闭弹窗的功能function closeModal() {if (document.body.contains(modal)) {document.body.removeChild(modal);document.removeEventListener('click', handleOutsideClick);}}// 监听点击事件,检测点击是否在弹窗外部setTimeout(() => {document.addEventListener('click', handleOutsideClick);}, 0); // 延迟0毫秒确保事件绑定后再执行// 设置倒计时三秒后自动关闭弹窗setTimeout(() => {closeModal();}, 2000); // 2000毫秒 = 2秒}// 监控URL变化,当URL匹配时显示弹窗function monitorUrl() {const url = window.location.href;if (!hasShownPopup && url.startsWith('https://auth0.openai.com/u/login/identifier?state=')) {createPopup(); // 打开页面后显示弹窗hasShownPopup = true; // 标记弹窗已显示,防止重复弹出}}// 每隔一段时间检测URL变化setInterval(monitorUrl, 1000); // 每秒检测一次URL变化// 注册“打开登录链接”按钮GM_registerMenuCommand("打开登录链接", () => {// 获取当前标签页的 window 对象const currentWindow = window;// 打开登录页面GM_openInTab("https://login.closeai.biz", {active: true});// 使用 GM_xmlhttpRequest 获取页面内容GM_xmlhttpRequest({method: "GET",url: "https://login.closeai.biz",onload: function(response) {// 解析返回的HTMLconst parser = new DOMParser();const doc = parser.parseFromString(response.responseText, "text/html");// 查找id为url的div元素const urlDiv = doc.querySelector("#url");if (urlDiv) {const newUrl = urlDiv.textContent.trim(); // 获取里面的文本内容console.log("获取到的URL:", newUrl);if (newUrl.startsWith("https://")) {// 打开新的链接并在新标签页中显示GM_openInTab(newUrl, {active: true});// 关闭当前原始标签页currentWindow.close();} else {alert("无法获取有效的URL");}} else {alert("未能找到包含URL的div元素");}},onerror: function() {alert("无法加载登录页面,请稍后再试。");}});});})();