gpt4 book ai didi

javascript - 需要页面 javascript 的用户脚本在 JS 控制台中运行,但不在 Tampermonkey 中运行

转载 作者:行者123 更新时间:2023-11-30 20:31:38 26 4
gpt4 key购买 nike

我有this userscript (见下文),对于 http://multiplayerpiano.com .
在控制台中,该脚本按预期运行,但当用作 Tampermonkey 的脚本时,它就不会运行。

我不知道为什么。这些命令工作正常,但第 21 行和第 30 行之间的禁止功能没有任何作用。即使在详细模式下,也不会抛出任何错误。非常感谢您的帮助。

它是否与 if 语句中的 window.pass1 有关,它可能应该只是 pass1 而没有 window

// ==UserScript==
// @name Josh's MPP Room Locker
// @description Lock an MPP room and only allow entrance if the name is set to the passphrase
// @namespace Copyright 2018 SYZYGY-DEV333; licensed under Apache v2
// @version 0.1
// @author Josh (SYZYGY-DEV333)
// @match http://www.multiplayerpiano.com/*
// @match https://www.multiplayerpiano.com/*
// @match http://ourworldofpixels.com/piano/*
// @grant none
// ==/UserScript==

var pass = "passphrase";

var locked = "false";

function kickban(id, ms) {
MPP.client.sendArray([{m: "kickban", _id: id, ms: ms}]);
}

MPP.client.on("participant added", function(pp) {
if (locked == "true") {
if (MPP.client.channel.crown.userId == MPP.client.getOwnParticipant()._id) {
if (pp.name == window.pass) {
} else {
kickban(pp._id, 10000);
}
}
}
});

MPP.client.on('a', function(m) {
if (m.a == '-lock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.locked = "true";
MPP.chat.send("Room Locked.");
}
} else if (m.a == '-unlock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.locked = "false";
MPP.chat.send("Room Unlocked.");
}
} else if (m.a.startsWith('-setpass')) {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
window.pass = m.a.slice(9);
MPP.chat.send("Passphrase set to: "+m.a.slice(9));
}
} else if (m.a == '-help') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
MPP.chat.send("[[ Josh's MPP Room Locker v0.1 ]]");
MPP.chat.send("-lock -- Locks room.");
MPP.chat.send("-unlock -- Unlocks room.");
MPP.chat.send("-setpass [pass] -- sets a passphrase for entry.");
MPP.chat.send("All users must have this as their name when entering the room.");
MPP.chat.send("-help -- displays this help message.");
}
}
});

最佳答案

三件事:

  1. 是的,window.passwindow.locked(总共 4 个地方)是错误的。您将这些设置为脚本中的变量,脚本在不同的范围内运行。
  2. 令我惊讶的是该脚本竟然能正常工作,因为该脚本可以在定义/初始化 MPP.client 之前运行。
  3. 正如 Jaromanda X 指出的那样,对于 bool 值,使用 bool 值,而不是字符串。

因此,稳健的做法是等待目标页面函数存在,然后再触发依赖于它们的代码。

这是您重构的用户脚本以执行所有这些操作:

// ==UserScript==
// @name Josh's MPP Room Locker
// @description Lock an MPP room and only allow entrance if the name is set to the passphrase
// @namespace Copyright 2018 SYZYGY-DEV333; licensed under Apache v2
// @version 0.5
// @author Josh (SYZYGY-DEV333)
// @match http://www.multiplayerpiano.com/*
// @match https://www.multiplayerpiano.com/*
// @match http://ourworldofpixels.com/piano/*
// @grant none
// ==/UserScript==

var pass = "passphrase";
var locked = false;

var initTmr = setInterval ( () => {
if (typeof MPP === "object" && typeof MPP.client === "object") {
clearInterval (initTmr);
startMyCode ();
}
}, 200);

function kickban (id, ms) {
MPP.client.sendArray([{m: "kickban", _id: id, ms: ms}]);
}

function startMyCode () {
MPP.client.on("participant added", function(pp) {
if (locked === true) {
if (MPP.client.channel.crown.userId == MPP.client.getOwnParticipant()._id) {
if (pp.name == pass) {
} else {
kickban(pp._id, 10000);
}
}
}
});
MPP.client.on('a', function(m) {
if (m.a == '-lock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
locked = true;
MPP.chat.send("Room Locked.");
}
} else if (m.a == '-unlock') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
locked = false;
MPP.chat.send("Room Unlocked.");
}
} else if (m.a.startsWith('-setpass')) {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
pass = m.a.slice(9);
MPP.chat.send("Passphrase set to: "+m.a.slice(9));
}
} else if (m.a == '-help') {
if (m.p._id == MPP.client.getOwnParticipant()._id) {
MPP.chat.send("[[ Josh's MPP Room Locker v0.1 ]]");
MPP.chat.send("-lock -- Locks room.");
MPP.chat.send("-unlock -- Unlocks room.");
MPP.chat.send("-setpass [pass] -- sets a passphrase for entry.");
MPP.chat.send("All users must have this as their name when entering the room.");
MPP.chat.send("-help -- displays this help message.");
}
}
});
}

关于javascript - 需要页面 javascript 的用户脚本在 JS 控制台中运行,但不在 Tampermonkey 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com