instagram Default Volume

set your Instagram videos default volumes

目前為 2024-02-11 提交的版本,檢視 最新版本

// ==UserScript==
// @name         instagram Default Volume
// @namespace    instagramDefaultVolume
// @version      1.1.0
// @description  set your Instagram videos default volumes
// @author       Runterya
// @homepage     https://github.com/Runteryaa
// @match        *://*.instagram.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=instagram.com
// @grant        none
// @license      MIT
// @compatible   chrome
// @compatible   edge
// @compatible   firefox
// @compatible   opera
// @compatible   safari
// ==/UserScript==

console.log("instagramDefaultVolume")

window.addEventListener('load', () => {
    if (!localStorage.getItem('defaultVolume')) {
        localStorage.setItem('defaultVolume', 0.2);
    }

    const findAndAppendVolumeDiv = () => {
        const targetElement = document.querySelector('.x1iyjqo2.xh8yej3');
        if (targetElement) {
            const volumeDiv = document.createElement('div');
            const volumeSelectorInput = document.createElement('input');
            const volumeSelectorText = document.createElement('span');
            
            volumeSelectorInput.type = 'range';
            volumeSelectorInput.value = localStorage.getItem('defaultVolume') * 100 || 20;
            volumeSelectorInput.min = 0;
            volumeSelectorInput.max = 100;

            volumeSelectorText.textContent = volumeSelectorInput.value;

            volumeSelectorInput.addEventListener('input', () => {
                volumeSelectorText.textContent = volumeSelectorInput.value;
                localStorage.setItem('defaultVolume', volumeSelectorInput.value / 100);
            });

            targetElement.appendChild(document.createElement('br'));
            targetElement.appendChild(volumeDiv);
            volumeDiv.appendChild(volumeSelectorInput);
            volumeDiv.appendChild(volumeSelectorText);
        } else {
            // If targetElement is not found, try again after a short delay
            setTimeout(findAndAppendVolumeDiv, 500);
        }
    };

    findAndAppendVolumeDiv();

    const setVolumeForVideos = () => {
        const defaultVolume = parseFloat(localStorage.getItem('defaultVolume'));
        const videos = document.getElementsByTagName('video');
        for (let i = 0; i < videos.length; i++) {
            videos[i].volume = defaultVolume;
        }
    };

    setVolumeForVideos();

    new MutationObserver(() => {
        setVolumeForVideos();
    }).observe(document.body, { childList: true, subtree: true });
});