1

我正在尝试编写一个油脂猴脚本,该脚本将在允许您查看成熟游戏内容之前自动执行 Steam 商店年龄检查。

我的问题是提交表单后,网站会自动重定向到新页面,而其余的greasemonkey脚本没有机会执行:

// ==UserScript==
// @name        agecheck
// @include     http://store.steampowered.com/agecheck/*
// @version     1.17
// @modified    11/23/2012
// @grant       GM_xmlhttpRequest
// ==/UserScript==

//Mini script for doing steam age checks automatically (used when scraping steam sites)
if (/agecheck/i.test (location.pathname) ) {
    var ageForm = document.querySelector ("#agegate_box form");
    ageForm.querySelector ("[name='ageDay']").value     = 18;
    ageForm.querySelector ("[name='ageMonth']").value   = 'August';
    ageForm.querySelector ("[name='ageYear']").value    = 1987;
    ageForm.submit();
    setTimeout( function(){ window.close(); }, 10000); //Never gets to run
}

为了验证代码是否有效,如果我只是注释掉该ageForm.submit();语句,则选项卡会在 10 秒后根据需要关闭。

提交表单后如何关闭窗口?

4

2 回答 2

1

您可以创建一个不可见的 iframe 并将表单的目标属性设置为指向该 iframe。因此页面位置不会改变。这个问题就是一个例子。

如果你想要一个纯 JS 解决方案,你可以检查这个问题,因为它解释了如何向 submit() 方法添加回调。

于 2012-11-23T18:42:03.817 回答
1

我已经使用以下代码解决了这个问题,该代码将表单提交的结果加载到隐藏的框架中,而不是允许表单更改当前窗口位置(这正在停止greasemonkey脚本):

if (/agecheck/i.test (location.pathname) ) {
    var ageForm = document.querySelector ("#agegate_box form");
    ageForm.querySelector ("[name='ageDay']").value     = 18;
    ageForm.querySelector ("[name='ageMonth']").value   = 'August';
    ageForm.querySelector ("[name='ageYear']").value    = 1987;

    var newFrame = document.createElement('frame');
    newFrame.name = "PostResult"
    document.body.appendChild(newFrame);
    ageForm.target = newFrame.name;

    ageForm.submit();
    setTimeout( function(){ window.close(); }, 10000);
}

感谢 G. Kayaalp 的提示。

于 2012-11-23T20:08:18.620 回答