我正在做一个Greasemonkey脚本,它通过REST API与Redmine票证管理器进行通信.由于用户需要登录才能从Redmine获取数据,我需要一种方法在脚本安装时询问用户的凭据并将其保存到脚本中.
这可以在不要求用户直接在脚本中编辑值的情况下实现吗?
编辑:
由于已经有了这个问题的答案,我将验证下面给出的答案,因为它是一个非常好的框架.
我编写了脚本来过滤掉作者在编程论坛中的帖子和帖子.
但是您需要将代码分别发布到Web控制台中.
我想知道是否有可能,如果是这样的话(使用firefox或chrome)如何设置浏览器以在加载特定网站时运行特定脚本?是否可以作为扩展或插件?
我正在编写一段当前在tampermonkey的代码,我无法理解为什么我在谷歌浏览器的控制台中出现这个错误,"执行脚本'PalaceBOT'失败!$未定义",我有另一个脚本,使用相同的主体,我没有遇到这些问题.
脚本:
// ==UserScript==
// @name SupremeBOT
// @namespace
// @version 0.1
// @description
// @author @alfiefogg_
// @match http://www.supremenewyork.com/shop/*
// @exclude http://wwww.supremenewyork.com/shop/cart
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @grant none
// ==/UserScript==
var mySize = "large"; //Change to appropriate size
var productSort = "accessories"; //Change to appropriate size
(function() {
var articles = $(".product-grid-item clearfix");
if(productSort != "all"){
for(var i = 0; i < articles.length;i++)
{
var category = $(articles[i]).find("a").attr("href");
if(category.indexOf(productSort) == -1){
articles[i].remove();
document.getElementsByClassName("product-grid-item clearfix")[4].click();
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个tampermonkey脚本,它根据文本的颜色为JIRA评论着色.着色确实按预期工作.但是JIRA问题的所有按键事件都被停用了.
在脚本之前,我可以按下.以激活操作菜单或按m添加注释等.
脚本后没有任何作用.
信息:当我在Chrome的Snippet Windows中运行脚本时,一切都很好 - 所有快捷方式仍然有效并且着色已经发生.这让我假设Tampermonkey在JIRA中覆盖或取消绑定键事件.
有人知道如何避免这种情况吗?
脚本
// ==UserScript==
// @name JiraCommentColors
// @namespace com.company.tamperscripts
// @version 0.2
// @description colorize comments in JIRA made by awesome xetra11
// @author xetra11
// @match https://jira.company.com/browse/*
// @grant none
// @require http://code.jquery.com/jquery-1.12.4.min.js
// ==/UserScript==
(function() {
var opacity = '0.3';
var borderStyle = '1px solid black';
var commentSelector = "div[id*='comment']";
var zwischenstandSelector = 'a[name=Zwischenstand]';
var fragenSelector = 'a[name=Frage]';
var wartenSelector = 'a[name=Warten]';
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个 Tampermonkey 脚本,它会自动将文本输入到某些表单输入字段中。
通常,您只需执行以下操作即可:
myElement.value = "my new text"
Run Code Online (Sandbox Code Playgroud)
问题是,这个表单正在使用 React,我无法直接更改该值,因为它没有设置 React 状态。我如何将所需的数据输入到我的 Tampermonkey 脚本中的这些 React 组件中?
通常我使用了以下代码片段,这通常有效:
(function () {
function main() {
//...script body...
}
var OGloboCSS = { // var could be named anything, appropriate to the page
addJQuery: function (callback) {
var script = document.createElement("script");
script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js");
script.addEventListener('load', function () {
var script = document.createElement("script");
script.textContent = "window.jQ=jQuery.noConflict(true);(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
};
OGloboCSS.addJQuery(main);
})();
Run Code Online (Sandbox Code Playgroud)
但偶尔我会在https://steamcommunity.com上收到类似这样的错误:
拒绝加载脚本' https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js ',因为它违反了以下内容安全策略指令:"script-src'unsafe-eval ''self''unsafe-inline''unsafe-eval'https: //steamcommunity-a.akamaihd.net/ https://api.steampowered.com/ http://www.google-analytics.com https:/ /ssl.google-analytics.com https://www.google.com https://www.gstatic.com https://apis.google.com ".
解决方案基本上是,您必须使用TamperMonkey的@require头指令,如下所示:
// @require …Run Code Online (Sandbox Code Playgroud) 在阅读之后,Greasemonkey建议用户安装Tampermonkey或Violentmonkey.
我已经安装了Tampermonkey,现在我正在尝试将所有我的Greasemonkey 3.x脚本转移到Tampermonkey上打开,但我找不到它的位置,甚至无法找到它.
我已经阅读了这个问题,说明它在Chrome上的位置和方式,但它在Firefox 57+上的位置是什么?我该如何转让?
PS:我希望我不需要更新我的每个用户脚本.
// ==UserScript==
// @name Test
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://myanimelist.net/*
// @require http://code.jquery.com/jquery-3.4.1.slim.min.js
// @grant none
// ==/UserScript==
var index = 0;
(function() {
'use strict';
$(document).ready(function () {
console.log(index);
index++;
setTimeout(() => { console.log(index); }, 2000);
});
})();
Run Code Online (Sandbox Code Playgroud)
所以你可以看到这段代码应该在控制台中返回:0然后1,但结果不同,实际上脚本运行了多次。
我唯一的线索是来自有问题的网站,有什么想法吗?
我有一个基于Javascript的机器人用于Xat聊天室,它也可以充当AI.我最近决定重做它的AI部分,因为它成为一个绝对庞大的else if声明链,变得几乎不可能使用.
我做了一些研究,并提出了如何处理响应的新想法.我先给你代码段:
function msgSwitch(id,msgRes) {
var botResponse = [];
switch (msgRes) {
case (msgRes.indexOf("hi") !=-1):
botResponse.push("HELLO. ");
case (msgRes.indexOf("how are you") !=-1):
botResponse.push("I AM FINE. ")
case (msgRes.indexOf("do you like pie") !=-1):
botResponse.push("I CAN'T EAT. THANKS, ASSHAT. ")
default:
respond (botResponse);
spamCount(id);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是检查msgRes(用户的输入)并查看它匹配的案例数量.然后对于每个匹配,它将push响应到botResponse数组中,然后在结束时,它将回复该数组中的所有消息.
例
用户信息: Hi! How are you?
msgRes: hi how are you
机器人比赛:
hi>推HELLO.送到阵列
how are you>推I AM FINE.送到阵列
机器人回应: …
我需要隐藏html页面中的一个部分:
<h1 data-ng-show="!menuPinned && !isSaaS" class="logo floatLeft" aria-hidden="false"><span>XXX </span><span style="font-weight: bold;">XXX </span><span>XXXXX</span></h1>
Run Code Online (Sandbox Code Playgroud)
以下代码在Chrome dev中正常运行.工具
var ibmlogo = document.querySelectorAll('h1.logo.floatLeft');
ibmlogo[1].remove();
Run Code Online (Sandbox Code Playgroud)
但是当我在脚本处于活动状态时加载页面时,部分(h1)将不会消失.我相信这是因为当脚本运行时,DOM尚未完成加载,因此脚本无法找到选择器.
我尝试了很多不同的东西(例如window.onLoad),但我的脚本仍然无效.最后一次尝试(失败)如下:
var logo = document.querySelectorAll('h1.logo.floatLeft');
logo.onload = function() {removeLogo()};
function removeLogo(){
console.log("### logo array lenght: " + logo.length);
logo[1].remove();
};
Run Code Online (Sandbox Code Playgroud)
有什么建议?谢谢Giovanni
tampermonkey ×10
javascript ×9
greasemonkey ×3
userscripts ×2
browser ×1
firefox-57+ ×1
html ×1
jira ×1
jquery ×1
reactjs ×1