Greasy Fork is available in English.

中文维基百科页面自动跳转到英文维基百科页面

2024/10/18 16:07:20

// ==UserScript==
// @name        中文维基百科页面自动跳转到英文维基百科页面
// @namespace   https://greasyfork.org/users/1382781
// @match       https://*.wikipedia.org/*
// @grant       none
// @license     GPLv3
// @version     1.3
// @author      -
// @description 2024/10/18 16:07:20
// ==/UserScript==

// 显示提示信息的函数
function showWarningMessage(message) {
    const warningMessage = document.createElement('div');
    warningMessage.textContent = message;
    warningMessage.style.position = 'fixed';
    warningMessage.style.top = '10px';
    warningMessage.style.left = '10px';
    warningMessage.style.padding = '10px';
    warningMessage.style.backgroundColor = 'red';
    warningMessage.style.color = 'white';
    warningMessage.style.zIndex = '1000';
    document.body.appendChild(warningMessage);
    setTimeout(()=>{warningMessage.classList.add('exit-animation')})
}


// 跳转到英文页面的函数
function jumpToEnglishPage() {
    document.getElementById('p-lang-btn-checkbox').click();

    setTimeout(() => {
      // 获取所有语言链接
      const langLinks = document.getElementsByClassName('autonym');

      // 如果没有找到语言链接,提示用户
      if (langLinks.length === 0) {
          showWarningMessage('无法找到该页面的英语版本');
      } else {
          let foundEnglish = false; // 标志变量,表示是否找到英语页面

          // 遍历所有语言链接
          for (let i = 0; i < langLinks.length; i++) {
               const langLink = langLinks[i];
              // 检查是否为英语链接
              if (langLink.lang === 'en') {
                   // 跳转到英语页面
                   window.location.href = langLink.href;
                   foundEnglish = true; // 找到英语页面,标志设置为true
                   break; // 找到后退出循环
               }
          }
          // 如果没有找到英语页面,提示用户
           if (!foundEnglish) {
               showWarningMessage('未找到该页面的英语版本');
               // 如果没有找到英文页面,3秒后自动隐藏提示
               setTimeout(() => {
                   warningMessage.style.display = 'none';
               }, 3000);
           }
      }
   }, 1000); // 1秒延

}

const style = document.createElement('style');
style.innerHTML = `

    /* 退出动画:向左移动并淡出 */
    @keyframes slide-out-left {
        0% { transform: translateX(0); opacity: 1; }
        100% { transform: translateX(-100%); opacity: 0; }
    }

    .exit-animation {
        animation: slide-out-left 2s forwards; /* 1秒内完成移动和淡出 */
    }
`;
document.head.appendChild(style);

window.addEventListener('load', function () {

    if (!window.location.hostname.startsWith('en')) {
        // 创建弹窗,显示提示信息和按钮
        const warningMessage = document.createElement('div');
        warningMessage.textContent = '将在3秒后跳转到英文页面';
        warningMessage.style.position = 'fixed';
        warningMessage.style.top = '10px';
        warningMessage.style.left = '10px';
        warningMessage.style.padding = '10px';
        warningMessage.style.backgroundColor = 'red';
        warningMessage.style.color = 'white';
        warningMessage.style.zIndex = '1000';
        warningMessage.style.display = 'flex';
        warningMessage.style.flexDirection = 'column';
        warningMessage.style.alignItems = 'flex-start';

        // 立即跳转按钮
        const immediateButton = document.createElement('button');
        immediateButton.textContent = '立即跳转';
        immediateButton.style.marginTop = '10px';
        immediateButton.style.backgroundColor = 'blue';
        immediateButton.style.color = 'white';
        immediateButton.style.border = 'none';
        immediateButton.style.padding = '5px';
        immediateButton.style.cursor = 'pointer';
        warningMessage.appendChild(immediateButton);

        // 手动跳转按钮(改为不跳转页面)
        const cancelButton = document.createElement('button');
        cancelButton.textContent = '不跳转';
        cancelButton.style.marginTop = '5px';
        cancelButton.style.backgroundColor = 'green';
        cancelButton.style.color = 'white';
        cancelButton.style.border = 'none';
        cancelButton.style.padding = '5px';
        cancelButton.style.cursor = 'pointer';
        warningMessage.appendChild(cancelButton);

        document.body.appendChild(warningMessage);

        let lv_timeoutf =  setTimeout(() => {
            jumpToEnglishPage();
        }, 3000);

        // 立即跳转按钮点击事件
        immediateButton.addEventListener('click', function () {
            warningMessage.style.display = 'none'
            jumpToEnglishPage();
            clearTimeout(lv_timeoutf)
        });
        cancelButton.addEventListener('click', function () {
            clearTimeout(lv_timeoutf)
            warningMessage.classList.add('exit-animation')
        });



    }

});