我正在开发一个用户脚本 - 特别是这个用户脚本- 其设计目的是将功能封装在模块中。为了能够进行一些自动化测试,我想将模块拆分为自己的文件,并使用 node.js 的模块导出和 require 函数合并到一个文件中,以便在 Greasemonkey 或简单的浏览器扩展中使用。
我的第一个想法是将模块复制到它们自己的文件中
模块.js
var exportedModule = (function (){
var Module = {
// public functions and members
};
//private functions and members
return Module;
}());
module.exports = exports = exportedModule;
Run Code Online (Sandbox Code Playgroud)
然后有一个需要每个模块的中央文件,也许可以使用Browserify之类的东西来编译它们。
脚本.js
var importedModule = require(./module);
importedModule.init();
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我想在某人的网站中缓存特定请求,然后我发现 service worker 是一个不错的选择。但是我找不到任何通过 tampermonkey 注入 service worker 的方法。那么有没有什么技巧可以做到这一点?
我的问题非常类似于javascript中自执行函数的目的是什么?,但是它涉及用户脚本(特别是针对 GreaseMonkey)。
我看到有些用户脚本是用这种模式分发的,有些则不是。
具有 IIFE 模式的脚本示例:(来源)
// ==UserScript==
// (...)
// ==/UserScript==
(function(){
// if <condition>
document.location.href += '?sk=h_chr';
// ...
})();
Run Code Online (Sandbox Code Playgroud)
没有它的脚本示例:(来源)
// ==UserScript==
// (...)
// ==/UserScript==
window.location.href = "https://www.facebook.com/?sk=h_chr";
Run Code Online (Sandbox Code Playgroud)
此外,我还发现 TamperMonkey 的“新脚本”模板遵循它,而 GreaseMonkey 和 ViolentMonkey 的模板没有。
那么问题是,IIFE 模式在编写用户脚本时有用吗?
特别是,如果我的脚本处于strictmode,并且我使用let而不是var. 无论如何,据我所知,用户脚本中定义的函数和变量在全局页面范围内不可用。
谢谢。
javascript userscripts tampermonkey ecmascript-6 greasemonkey-4
我知道使用 Chrome,我可以使用代码片段在网页上手动运行一些 JavaScript 代码。但这需要手动执行代码片段。有没有办法让我的浏览器(Chrome 或 Firefox)在每次访问新页面时加载一些 JavaScript 代码?
javascript userscripts google-chrome-extension firefox-addon-webextensions web-extension
我在这个网站上看到了大量关于程序员如何打开和关闭网页的暗模式的问答。
但是,作为用户,我如何禁用浏览器的暗模式呢?
我习惯将操作系统设置为深色主题,但我希望浏览器页面默认为浅色主题。
我chrome://flags/#enable-force-dark
也试过了chrome.exe --disable-features=DarkMode
,都没有效果。(2023 年 2 月,Chrome 110)
我知道很多网页都是通过阅读来决定是否启用深色模式prefers-color-scheme,但这似乎是一个无法改变的值。
我还知道在 DevTools 中可以通过“模拟 CSS 媒体功能”来启用它prefers-color-scheme: light。但它无法持久化和自动化 - 这意味着我必须启用 DevTools 并为每个打开的新页面启用模拟。
到目前为止,除了关闭操作系统的深色模式之外,还有什么方法可以禁用网页的深色模式呢?
我是JavaScript和Greasemonkey的noob,我想写一个简单的脚本.
我知道Greasemonkey用一个匿名函数包装你的代码,所以你的变量在离开当前页面后将不存在.但是,我需要一个全局变量.我试图使用unsafeWindow和window对象,如下所示:
if (window.myVar == undefined) {
window.myVar = "myVar";
}
Run Code Online (Sandbox Code Playgroud)
如果我刷新页面,则条件的值始终为true.
有没有办法在Greasemonkey中使用全局变量?
我有两个脚本.我把它们放在同一个命名空间(@namespace字段)中.
我希望他们与另一个人互动.
具体来说,我想脚本一个设置RunByDefault为123有无脚本B检查,如果RunByDefault==123还是没有,然后有一个脚本使用超时或任何调用函数中的脚本B.
我该怎么做呢?我讨厌合并脚本.
我将尽可能地在这里绝对冗长,因为我遇到了一些没有最终淘汰的解决方案.请记住,我不知道Javascript.我知道基本的HTML和CSS.我没有任何实际的编程背景,但我正在尝试通过研究这样的基本任务来逐步学习.请跟我说说我是个白痴.我在研究这个具体问题的过程中学到了这篇文章.我正在将此用户手写为个人项目,并与一些朋友分享.
我正在尝试为Chrome/Greasemonkey编写用户脚本(Chrome是我的目标浏览器),它将点击Battlefield 3服务器浏览器上的" 刷新"按钮.对于那些不知道的人,"战地3"使用一个与VOIP浏览器插件配对的网站,并通过服务器浏览器实际启动游戏.它的大部分似乎是在表格中排列的相当直接的HTML.
我们的想法是,当查看已满服务器的主页面时,脚本将每隔三秒左右单击" 刷新"按钮,直到该页面报告服务器上的开放点,然后停止刷新循环并单击"加入服务器"按钮.我已经运行了脚本运行的部分,轮询服务器当前和最大的玩家然后将它们分配给他们自己的变量.
此时我正试图在控制台中点击一下工作,这样我就可以在脚本中使用它并且运气不好.
这是我试图从Chrome开发工具中点击的按钮的div:
<div class="serverguide-header-refresh-button alternate show">
<div type="reset" class="common-button-medium-grey">
<p style="position: relative;">
<a href="/bf3/servers/show/c7088bdc-2806-4758-bf93-2106792b34d8/">Refresh </a>
</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
(该链接不是静态的.它是指向特定服务器页面的链接)
要实际找到我正在使用的按钮getElementsByClassName.它没有唯一的ID,但该类对于此特定页面上的元素是唯一的,因此getElementsByClassName("serverguide-header-refresh-button")[0]每次都会拉出适当的div.它正在让脚本对按钮执行任何实际操作,这就是问题所在.
document.getElementsByClassName("serverguide-header-refresh-button")[0].click();
Run Code Online (Sandbox Code Playgroud)
我现在意识到这不起作用,因为它不是传统的提交按钮.我不明白标准的具体细节,但我得知它不支持该.click()方法.
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
script.addEventListener('load', function() {
var script = document.createElement("script");
script.textContent = "(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
// the guts of this userscript
function main() {
unsafeWindow.jQuery('.serverguide-header-refresh-button')[0].click();
} …Run Code Online (Sandbox Code Playgroud) javascript automation greasemonkey javascript-events userscripts
在用户脚本中使用querySelector()vs jQuery 有什么好处$()吗?我希望该脚本适用于支持用户脚本的所有主流浏览器,因此我对跨浏览器兼容性特别感兴趣.
我开始怀疑这一点,因为我注意到,诚实优秀的Reddit Enhancement Suite包含jQuery作为依赖项,但主要querySelector()用于选择元素和其他用于DOM操作的基本JavaScript方法.
这只是一个品味问题,还是有理由将jQuery的使用保持在最低限度?
greasemonkey cross-browser css-selectors jquery-selectors userscripts
所以我正在尝试为一个网站创建用户脚本.我无法更改网站的任何源代码,因为它不是我的.网站到处都在使用AngularJS控制器.我正在研究如何做到这一点,但没有成功.
因此,$(".nav").after("<div>test</div>");当我通过Firefox开发者控制台执行此操作时,我正在尝试注入它正在工作的代码,但是当我尝试通过Userscript执行此操作时,为什么它不起作用.
我确实$(function () { ... });在代码中添加了东西,所以它在DOM准备好之后触发句柄,但它仍然无效.
有办法吗?我迫切希望了解AngularJS的工作原理......
我将不胜感激任何帮助.
userscripts ×10
javascript ×6
greasemonkey ×4
tampermonkey ×3
angularjs ×1
automation ×1
css ×1
darkmode ×1
ecmascript-6 ×1
firefox-addon-webextensions ×1
interaction ×1
jquery ×1
module ×1
node.js ×1
requirejs ×1