由于重定向,Greasemonkey脚本在提交表单后停止执行

时间:2012-11-23 17:55:32

标签: javascript forms greasemonkey

我正在尝试编写一个greasemonkey脚本,该脚本会在允许您查看成熟的游戏内容之前自动执行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秒后根据需要关闭。

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

2 个答案:

答案 0 :(得分:1)

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

如果您需要纯JS解决方案,可以查看this问题,因为它解释了如何向submit()方法添加回调。

答案 1 :(得分: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的提示。