ソースを参照

添加 'aliyun-no-new-tabs.user.js'

吴迪 3 年 前
コミット
21e7321690
1 ファイル変更56 行追加0 行削除
  1. 56 0
      aliyun-no-new-tabs.user.js

+ 56 - 0
aliyun-no-new-tabs.user.js

@@ -0,0 +1,56 @@
+// ==UserScript==
+// @name         阿里云掌控版
+// @namespace    http://tampermonkey.net/
+// @version      1.0.1
+// @description  try to take over the world!
+// @author       wd
+// @match        https://*.aliyun.com/*
+// @match        https://www.tapd.cn/*
+// @icon         https://www.google.com/s2/favicons?domain=aliyun.com
+// @grant        none
+// @run-at       document-start
+// ==/UserScript==
+
+const SELF = '_self';
+const BLANK = '_blank';
+
+(function() {
+    'use strict';
+    let isPressed = false;
+
+    const makeKeyListener = (state) => {
+        return e => {
+            if (['Meta', 'Control'].includes(e.key)) {
+                isPressed = state
+                // console.log(state, e, isPressed);
+            }
+        };
+    }
+    window.addEventListener('keydown', makeKeyListener(true));
+    window.addEventListener('keyup', makeKeyListener(false));
+    // window.open
+    const navigate = (href) => Object.assign(document.createElement("a"), { href, target: isPressed ? BLANK : SELF }).click();
+    window.open = (url) => navigate(url);
+    // anchor
+    setInterval(() => {
+        document.querySelectorAll("a").forEach(e => { e.target = SELF });
+    });
+
+    const observer = new MutationObserver(mutationList => {
+        mutationList.forEach(mutation => {
+            // console.log(mutation.addedNodes);
+            if (mutation.addedNodes.length) {
+                mutation.addedNodes.forEach(node => {
+                    if (node instanceof HTMLAnchorElement) node.target = SELF;
+                })
+            }
+        })
+    });
+    const checkReady = () => {
+        const body = document.getElementsByTagName("body")[0];
+        if (!body) return setTimeout(checkReady, 1000);
+        observer.observe(body, { childList: true });
+    }
+
+    checkReady();
+})();