您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Gets the markers_all json file and change user defined markers to be markable.
- // ==UserScript==
- // @name GI AppSample Map - More Markable Markers
- // @namespace http://tampermonkey.net/
- // @version 1.2
- // @description Gets the markers_all json file and change user defined markers to be markable.
- // @author 2KRN4U
- // @match https://genshin-impact-map.appsample.com/*
- // @icon https://genshin-impact-map.appsample.com/favicon.ico
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- // List of markers to change
- const list = "o596, o601, o602, o639, o641, o647, o128"; // EDIT THIS LINE ONLY, seperate by comma. Example "o596, o317";
- const targetFilenameStart = "markers_all"; // Filename of the markers file
- const keys = list.split(",").map(key => key.trim()); // Convert list to an array of trimmed keys
- const allowMarkComment = 5; // Value to allow marking and commenting
- // Save references to the original XHR methods
- const originalOpen = XMLHttpRequest.prototype.open;
- const originalSend = XMLHttpRequest.prototype.send;
- // Override the open method
- XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
- this._filename = url.split('/').pop(); // Extract the filename from the URL
- this._url = url; // Store the URL for later use
- originalOpen.apply(this, arguments); // Call the original open method
- };
- // Override the send method
- XMLHttpRequest.prototype.send = function (body) {
- this.addEventListener('readystatechange', function () {
- // Only process requests if the filename matches the target prefix
- if (
- this.readyState === 4 &&
- this.status === 200 &&
- this._filename.startsWith(targetFilenameStart) // Check if filename starts with the target string
- ) {
- try {
- let modifiedResponseText = this.responseText;
- // Apply replacements for each key in the list
- keys.forEach(key => {
- const searchPattern = new RegExp(`("${key}",\\d+,)(\\d+)(,)`, 'g'); // Search pattern for markers
- modifiedResponseText = modifiedResponseText.replace(
- searchPattern,
- (_, prefix, lastDigits, suffix) => `${prefix}${allowMarkComment}${suffix}`
- ); // Replace to allow marking and commenting
- });
- // Overwrite the responseText property with the modified content
- Object.defineProperty(this, 'responseText', {
- value: modifiedResponseText,
- configurable: true,
- });
- // Optional: Overwrite response (useful if response is accessed differently)
- Object.defineProperty(this, 'response', {
- value: modifiedResponseText,
- configurable: true,
- });
- } catch (e) {
- console.error('Error modifying JSON response:', e);
- }
- }
- });
- // Call the original send method
- originalSend.apply(this, arguments);
- };
- // Wait for the DOM to fully load
- window.addEventListener('load', function () {
- // Function to modify the title
- const modifyTitle = (originalTitle, dataTestId) => {
- // Trim the first 4 characters of data-testid
- const trimmedData = dataTestId ? dataTestId.slice(4) : 'Unknown';
- // Combine the original title with the trimmed data-testid
- return `${originalTitle}: ${trimmedData}`;
- };
- // Select all buttons with the class "MuiButtonBase-root"
- const buttons = document.querySelectorAll('.MuiButtonBase-root');
- // Iterate over each button
- buttons.forEach(button => {
- const originalTitle = button.getAttribute('title');
- const dataTestId = button.getAttribute('data-testid');
- // Only proceed if both title and data-testid exist
- if (originalTitle && dataTestId) {
- const newTitle = modifyTitle(originalTitle, dataTestId);
- button.setAttribute('title', newTitle);
- }
- });
- });
- })();