Fix ChatGPT not loading in multiple tabs (due to Performance.measure Error)

Fixes ChatGPT failing to load when you open several tabs. Some sessions crash because of bad `Performance.measure` calls used for analytics. This script safely overrides `Performance.measure`, skipping invalid calls so the site loads normally while leaving your experience unchanged. Fully commented; questions and feedback welcome.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Fix ChatGPT not loading in multiple tabs (due to Performance.measure Error)
// @namespace    12centuries
// @version      0.1
// @description  Fixes ChatGPT failing to load when you open several tabs. Some sessions crash because of bad `Performance.measure` calls used for analytics. This script safely overrides `Performance.measure`, skipping invalid calls so the site loads normally while leaving your experience unchanged. Fully commented; questions and feedback welcome.
// @author       12centuries
// @license      MIT
// @match        *://chatgpt.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Override the Performance.measure function
    if (window.performance && typeof window.performance.measure === 'function') {
        const originalMeasure = window.performance.measure;
        window.performance.measure = function(measureName, startMark, endMark) {
            try {
                // Check if the 'end' attribute (endMark) is negative
                // or any other condition that causes the specific TypeError
                if (typeof endMark === 'number' && endMark < 0) {
                    console.warn(`Userscript intercepted problematic Performance.measure call for: ${measureName}. End mark was negative.`);
                    return; // Skip the problematic call
                }
                // Call the original function if the values are valid
                originalMeasure.call(this, measureName, startMark, endMark);
            } catch (e) {
                if (e instanceof TypeError && e.message.includes('Given attribute end cannot be negative')) {
                    console.warn(`Userscript caught and suppressed TypeError in Performance.measure for: ${measureName}`);
                    // Suppress the error and continue
                } else {
                    throw e; // Re-throw other errors
                }
            }
        };
    }
})();