Vanilla JavaScript代码在控制台中运行,但不是从(greasemonkey)脚本运行

时间:2018-04-08 16:16:38

标签: javascript debugging dom console href

我使用最新的Firefox和Greasemonkey的Windows10主页。

我在livedns.co.il创建了一个帐户,这是一个以色列域名注册。然后我登录了。

登录个人概览区域后,我尝试通过此代码将自己移至域名管理区域

window.location.href = "https://domains.livedns.co.il/DomainsList.aspx";

它可以在控制台中运行,但不是来自greasemonkey脚本。

我以为我可能需要脚本中的setTimeout()

setTimeout(()=>{
        window.location.href = "https://domains.livedns.co.il/DomainsList.aspx";
}, 1000);

但此代码也仅适用于控制台。

重现的步骤

创建帐户并登录后,这是我使用的原始模式:

// ==UserScript==
// @name        livednsAutoLogin
// @include     https://domains.livedns.co.il/Default.aspx
// ==/UserScript==

console.log(window.location.href); // This fails in Greasemonkey if the code below exists; If I'll delete all code below, it will succeed in Greasemonkey;

document.querySelector("#ctl00_TopLoginBox1_txtUname").value = "myUsername";
document.querySelector("#ctl00_TopLoginBox1_txtPassword").value = "myPassword";
document.querySelector("#ctl00_TopLoginBox1_btnLogin > .FltRt").click();

setTimeout(()=>{
        window.location.href = "https://domains.livedns.co.il/DomainsList.aspx";
}, 250);

只需更改用户名和密码,然后进行测试。

我的问题

是什么让vanilla JavaScript代码在控制台中运行,而不是从(greasemonkey)脚本运行?特别是,为什么更改文档位置的href只能在控制台中工作,而不能在Greasemonkey脚本中工作?

我不知道在这种情况下如何调试,因为我在运行脚本时没有在控制台中看到错误。

1 个答案:

答案 0 :(得分:1)

从错误的URL运行代码时出现了逻辑错误(我应该确保我在https://domains.livedns.co.il/Main.aspx成功运行代码。我通过使用if-then条件修复了这个问题(我会通过这种方式查明我是否有任何重大的安全威胁。)

请注意我是如何更改@include并使用更丰富的网址的。

// ==UserScript==
// @name        livednsAutoLogin
// @include     *livedns.co.il/*
// ==/UserScript==

if ( document.location.href == "https://domains.livedns.co.il/" ) {
    document.querySelector("#ctl00_TopLoginBox1_txtUname").value = "myEmail";
  document.querySelector("#ctl00_TopLoginBox1_txtPassword").value = "myPassword";
  document.querySelector("#ctl00_TopLoginBox1_btnLogin > .FltRt").click();
}

if ( document.location.href == "https://domains.livedns.co.il/Main.aspx" ) {
    console.log(window.location.href);
  document.location.href = "https://domains.livedns.co.il/DomainsList.aspx"  
}