Greasemonkey脚本超时选项

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

在我们公司中,我们使用Firefox润滑脂monkey插件在网页上填写登录凭据以打开并自动登录。

这是脚本的外观:

// ==UserScript==
// @name        logon
// @namespace   https://www.example.com
// @include     https://www.example.com
// @version     1
// @grant       none
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript== 
$(document).ready(function() {  
$('input[name=username]').val('*****');
$('input[name=passcode]').val('*****');
$('input[name=send]').click(); 
});

自升级到Firefox 70后,该脚本不再输入登录凭据。我的印象是,这是由于页面加载缓慢而脚本执行速度很快。

因此,我想在此脚本中插入一个超时。因此,它将仅在打开页面后5秒钟后执行。

我已经尝试了一些在网上找到的示例,但似乎都没有用。

非常感谢您的帮助!

谢谢

javascript firefox greasemonkey
1个回答
0
投票

如果您的theory关于不起作用的原因是正确的,则下面的代码应该起作用。观察其他一些变化,例如:

  • 这样的琐碎事情不需要JQuery。或任何东西。只是不要。它增加了对代码的依赖性,几乎没有好处。
  • 您应该不是将密码存储在纯文本脚本中,但是如果您至少将其放在变量中,以便非程序员可以在哪里更改密码,就很明显。
  • 使用someinput.form.submit()还将提交表单,并删除您必须依靠其存在的一个输入(如果重命名了提交按钮,该脚本仍然有效)。
// ==UserScript==
// @name        logon
// @namespace   https://www.example.com
// @include     https://www.example.com
// @version     1
// @grant       none
// @rut-at      document-start
// ==/UserScript== 

const TIMEOUT = 2000;
const NAME = "***";
const PASSWORD = "***";
document.addEventListener("load", function() {
    setTimeout(function() {
        document.querySelector("input[name=username]").value = NAME;
        document.querySelector("input[name=passcode]").value = PASSWORD;
        document.querySelector("input[name=passcode]").form.submit();
    }, TIMEOUT);
});

但是您的原始脚本可能也打破了您的想象,例如:

  • 重命名输入字段。使用开发人员工具检查它们,看是否有名称,类名或ID。
  • 现在使用的框架不从字段中读取值,而仅当您输入它们时才更新其内部值

在开发控制台中查找错误。下次询问时,还请演示您尝试过什么以及如何失败,否则您将学不到的知识。

© www.soinside.com 2019 - 2024. All rights reserved.