批量修改dns

auto change domain dns!

目前为 2023-07-02 提交的版本。查看 最新版本

// ==UserScript==
// @name         批量修改dns
// @namespace    http://tampermonkey.net/
// @version      0.1.2
// @description  auto change domain dns!
// @author       lmlife
// @match        https://www.onamae.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
  $(document).ready(
    () => {
      (async () => {
        if (window.location.href.indexOf('ns_update/input') > -1) {
          inputPageEntry()
        }

        if (window.location.href.indexOf('ns_update/confirm') > -1) {
          confirmPageEntry()
        }
      })()
    }
  )
})();

function inputPageEntry() {
  console.log('进入ns_update/input');
  var textarea = $("<textarea placeholder='输入域名'></textarea>");
  var button = $("<button>确认</button>");
  var input1 = $("<input placeholder='输入 1主域名服务器' />");
  input1.val('ns1.alidns.com');
  var input2 = $("<input placeholder='输入 2辅助域名服务器' />");
  input2.val('ns2.alidns.com');

  const observer = new MutationObserver(async () => {
    $('#paradigm_all')[0].click();
    $('#name_s_tab02 label')[0].click();
    await nextTick();
    $('#txtDomain1').val(input1.val());
    $('#txtDomain2').val(input2.val());
    $('#idSubmit')[0].click();
    observer.disconnect();
  });
  observer.observe($('#domaininput_view')[0], { childList: true });

  button.click(async function () {
    $('#domain').val(textarea.val());
    $('#btnSearch a')[0].click();
  });

  var container = $("<div style='position: fixed; bottom: 0; left:0; right: 0; padding: 8px; background: #fff;'></div>").append(textarea, input1, input2, button);
  $("body").append(container);
  $("body").css({ marginBottom: `${container.clientHeight}px` })
}

async function confirmPageEntry() {
  console.log('进入ns_update/confirm')
  await pollGetElement('[href="javascript:submitconfirmForm()"]', (dom) => dom.click())
}

function nextTick() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve()
    })
  })
}

function pollGetElement(selector, cb) {
  return new Promise((resolve) => {
    var timer = setInterval(() => {
      var dom = $(selector)[0]
      if (dom) {
        clearInterval(timer)
        cb(dom)
        resolve()
      }
    }, 1000)
  })
}

if (!window.loadStatusDomain) {
  window.loadStatusDomain = () => { }
}