네이버 카페 게시물 실제 아이디 클립보드 복사

네이버 카페 게시물의 작성자 아이디를 버튼을 통해 클립보드로 복사하고, 복사된 아이디를 표시합니다. 닉네임 옆에 "(아이디)" 텍스트를 추가합니다.

目前为 2023-06-08 提交的版本。查看 最新版本

// ==UserScript==
// @name          네이버 카페 게시물 실제 아이디 클립보드 복사
// @namespace     네이버 카페 게시물 실제 아이디 클립보드 복사
// @grant         GM_setClipboard
// @match         https://cafe.naver.com/*
// @version       0.1
// @description   네이버 카페 게시물의 작성자 아이디를 버튼을 통해 클립보드로 복사하고, 복사된 아이디를 표시합니다. 닉네임 옆에 "(아이디)" 텍스트를 추가합니다.
// @icon          data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABWCAIAAADaNPagAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyZmY5OTI1NS1hNTU3LTRjY2MtOWNjMi1kN2Q4MWY1OTNkNzIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjdCQkZBQUFGNDg5MTFFNTg3NDg4RDAwRUJEQThCNzciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjdCQkZBQTlGNDg5MTFFNTg3NDg4RDAwRUJEQThCNzciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMkU4REM1MEUzNUExMUU1OTNFQ0Y0NjJCNDJGREZBRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMkU4REM1MUUzNUExMUU1OTNFQ0Y0NjJCNDJGREZBRSIvPiA8L3Jk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
// @author        mickey90427 <[email protected]>
// ==/UserScript==

(function () {
  // 버튼 클릭 시 아이디 복사 함수
  function copyWriterId() {
    const writerId = this.getAttribute('data-writer-id');
    GM_setClipboard(writerId);
    showCopiedText(writerId);
  }

  // '블로그 가기' 버튼 클릭 시 블로그로 이동하는 함수
  function goToBlog() {
    const writerId = this.getAttribute('data-writer-id');
    const blogUrl = `https://blog.naver.com/${writerId}`;
    window.open(blogUrl, '_blank');
  }

  // 이메일 복사 함수
  function copyWriterEmail() {
    const writerId = this.getAttribute('data-writer-id');
    const email = `${writerId}@naver.com`;
    GM_setClipboard(email);
    showCopiedText(email);
  }

  // 복사된 아이디 표시 함수
  function showCopiedText(writerId) {
    const textElement = document.createElement('div');
    textElement.className = 'copied-text';
    textElement.textContent = `복사된 아이디: ${writerId}`;
    document.querySelector('.article_info').appendChild(textElement);
    setTimeout(() => {
      textElement.remove();
    }, 1000);
  }

  // MutationObserver 콜백 함수
  function observeMutation(mutations) {
    mutations.forEach((mutation) => {
      // 노드 추가일 경우
      if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
        const addedNode = mutation.addedNodes[0];
        // 추가된 노드가 작성자 정보 버튼을 포함하고 있는지 확인
        if (addedNode.querySelector('[id^="writerInfo"]')) {
          const writerInfoButton = addedNode.querySelector('[id^="writerInfo"]');
          const writerId = writerInfoButton.id.replace("writerInfo", "");

          // 버튼 추가
          const nickLevelElement = addedNode.querySelector('.nick_level');

          const button = document.createElement('button');
          button.className = 'copy-button';
          button.innerHTML = `
            <svg class="copy-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M0 0h24v24H0z" fill="none"/>
              <path d="M14 5H4v16h16V9h-2v10H6V7h8z"/>
            </svg>
            아이디 복사
          `;
          button.setAttribute('data-writer-id', writerId);
          button.addEventListener('click', copyWriterId);

          const emailButton = document.createElement('button');
          emailButton.className = 'email-button';
          emailButton.innerHTML = `
            <svg class="email-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M0 0h24v24H0z" fill="none"/>
              <path d="M20 4H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm-1.414 2L12 10.586 5.414 6H18.586zM4 18V8.414l7 5.657 7-5.657V18H4z"/>
            </svg>
            이메일 복사
          `;
          emailButton.setAttribute('data-writer-id', writerId);
          emailButton.addEventListener('click', copyWriterEmail);

          const blogButton = document.createElement('button');
          blogButton.className = 'blog-button';
          blogButton.innerHTML = `
            <svg class="blog-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M0 0h24v24H0z" fill="none"/>
              <path d="M14 5H4v16h16V9h-2v10H6V7h8z"/>
            </svg>
            블로그 가기
          `;
          blogButton.setAttribute('data-writer-id', writerId);
          blogButton.addEventListener('click', goToBlog);

          // 버튼을 담을 컨테이너 추가
          const buttonContainer = document.createElement('div');
          buttonContainer.className = 'button-container';
          buttonContainer.appendChild(button);
          buttonContainer.appendChild(emailButton);
          buttonContainer.appendChild(blogButton);

          nickLevelElement.insertAdjacentElement('afterend', buttonContainer);

          // 닉네임 수정
          const nicknameButton = addedNode.querySelector('.nickname');
          const nicknameText = nicknameButton.textContent.trim();
          nicknameButton.textContent = `${nicknameText} (${writerId})`;

          // 스타일 수정
          buttonContainer.style.marginLeft = '0px';
          nicknameButton.style.marginRight = '0px';
          nicknameButton.style.paddingRight = '0px';
        }
      }
    });
  }

  // 스타일 추가
  const style = document.createElement('style');
  style.textContent = `
    .copy-button, .email-button, .blog-button {
      display: inline-flex;
      align-items: center;
      font-size: 12px;
      font-weight: bold;
      padding: 2px 6px;
      border-radius: 4px;
      color: #fff;
      border: none;
      cursor: pointer;
      transition: background-color 0.3s;
      margin: 0 2px;
    }

    .copy-button {
      background-color: #4CAF50;
    }

    .copy-button:hover {
      background-color: #45A049;
    }

    .email-button {
      background-color: #FFC107;
    }

    .email-button:hover {
      background-color: #FFA000;
    }

    .blog-button {
      background-color: #2196F3;
    }

    .blog-button:hover {
      background-color: #1976D2;
    }

    .button-container {
      display: inline-flex;
      align-items: center;
      margin-left: 4px;
    }

    .copied-text {
      font-size: 12px;
      font-weight: bold;
      padding: 4px;
      border-radius: 4px;
      color: #fff;
      background-color: rgba(0, 0, 0, 0.7);
      position: absolute;
      top: 40px;
      left: 0;
      right: 0;
      margin: auto;
      text-align: center;
      transition: opacity 0.3s;
    }

    .copied-text::before {
      content: '';
      display: block;
      width: 20px;
      height: 20px;
      margin: 0 auto 8px;
    }

    .copy-icon, .email-icon, .blog-icon {
      width: 16px;
      height: 16px;
      margin-right: 4px;
    }
  `;
  document.head.appendChild(style);

  // MutationObserver 설정
  const observer = new MutationObserver(observeMutation);
  observer.observe(document.body, { childList: true, subtree: true });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址