繁体   English   中英

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

[英]Greasemonkey script halts execution after submitting form due to redirect

我正在尝试编写一个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 秒后根据需要关闭。

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

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

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

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

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 的提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM