您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
「プレミアム会員が入場したため、席を譲りました」「優先視聴ユーザーが入場したため、席を譲りました」されたらリロードするだけ
// ==UserScript== // @name ニコ生追い出しされたらリロード // @namespace http://tampermonkey.net/ // @version 1.0 // @description 「プレミアム会員が入場したため、席を譲りました」「優先視聴ユーザーが入場したため、席を譲りました」されたらリロードするだけ // @match https://live.nicovideo.jp/watch/* // @icon https://www.google.com/s2/favicons?sz=64&domain=nicovideo.jp // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; const searchTextPattern = /席を譲りました/; const playerScreenClass = document.querySelector('[class*="___player-display-screen___"]').classList[0]; const targetElement = document.querySelector(`.${playerScreenClass}`); if (targetElement) { // MutationObserverのコールバック関数 const observerCallback = function(mutationsList) { for (const mutation of mutationsList) { for (const addedNode of mutation.addedNodes) { // 追加されたノードがdialogLayerに属しているかチェック if (addedNode.dataset.layerName === 'dialogLayer') { // dialogLayer内の要素を処理する関数を呼び出す handleDialogLayerElement(addedNode); } } } }; // dialogLayer内の要素を処理する関数 const handleDialogLayerElement = function(dialogLayerElement) { // alert要素をクエリセレクタで検索 const alertElements = dialogLayerElement.querySelectorAll('[data-type="alert"]'); for (const alertElement of alertElements) { // alert要素内のh2要素を取得 const h2Element = alertElement.querySelector('h2'); if (h2Element && searchTextPattern.test(h2Element.textContent)) { // マッチするテキストが見つかった場合、ページをリロード reloadPage(); break; } } }; // ページをリロードする関数 const reloadPage = function() { location.reload(); }; // MutationObserverのオプション設定 const observerOptions = { childList: true, subtree: true }; const observer = new MutationObserver(observerCallback); // 監視対象要素にMutationObserverを設定 observer.observe(targetElement, observerOptions); } })();