userscript window.postMessage iframe 破坏了一些网站

问题描述 投票:0回答:0

我正在写一个用户脚本,我需要生成一个精确的自增id,我认为使用顶级主框架全局变量来处理这个是最好的方法。但是,有些站点似乎与脚本的postMessage冲突,例如:https://arad.hange.jp/,当我使用postMessage时,他没有正确呈现,我该怎么办以避免影响那个网站?

我试过使用GM.getValue GM.setValue来做,但是在临界情况下,它不能完全自增1,因为GM.setValue不能实现原子+1操作。

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=fosstodon.org
// @grant        GM.addStyle
// @grant        GM.getValue
// @grant        GM.setValue
// ==/UserScript==

(function () {
  "use strict";

  if (window.self === window.top) {
    let globalId = 0;
    window.addEventListener("message", (e) => {
      if (e && e.data && e.data.id === "increaseOne") {
        globalId++;
        console.log("globalId", globalId);
      }
    });
  } else {
    // child iframe
    // get root window
    // check is root window

    setTimeout(() => {
      window.top.postMessage({ id: "increaseOne" }, "*");
    }, 1000);
  }
})();
greasemonkey userscripts
© www.soinside.com 2019 - 2024. All rights reserved.