我正在尝试编写一个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秒后根据需要关闭。
如何在提交表单后关闭窗口?
答案 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的提示。