发送,截取和修改,提交重新加载(错误)页面

时间:2012-11-30 02:36:36

标签: javascript forms submit greasemonkey prototype

我在Firefox中使用Greasemonkey脚本拦截提交过程以修改某个post变量。我保存旧的提交例程以便稍后调用它并用我的拦截(修改)函数覆盖HTMLFormElement.prototype.submit

我目前面临的问题是,在修改后,某些内容会删除帖子变量post=Submit并调用(旧)提交函数将我带回当前页面。

var intercept_complete = false;

window.addEventListener('submit', function (e) {
    e.stopPropagation();
    e.preventDefault();
    interceptor(e);
}, true);

function interceptor_setup() {
    HTMLFormElement.prototype.real_submit = HTMLFormElement.prototype.submit;
    HTMLFormElement.prototype.submit = interceptor;
}

function interceptor(e) {
    var frm = e ? e.target : this;
    if (!interceptor_onsubmit(frm)) {
        return false;
    }

    if (!intercept_complete) {
        ModifyAndPost(frm);
        return false;
    } else {
        HTMLFormElement.prototype.real_submit.apply(frm);
        return true;
    }
}

function interceptor_onsubmit(f) {
    return !f.onsubmit || f.onsubmit();
}

function ModifyAndPost(f) {
    var attrs = new Array('name', 'type', 'value');

    for (var i = 0; i < f.elements.length; i++) {
        for (var a = 0; a < attrs.length; a++) {
            if (attrs[a] == 'name') {
                if (f.elements[i][attrs[a]] == "message") {
                    var current_message = f.elements[i][attrs[a + 2]];
                    if (current_message.indexOf("hello") != -1) {
                        var do_replace = confirm("Detected hello, would you like to replace that with bye?");
                        if (do_replace) {
                            f.elements[i][attrs[a + 2]] = current_message.replace("hello", "bye");
                        }
                    }
                }
            }
        }
    }
    PerformSubmit(f);
}

function PerformSubmit(f) {
    HTMLFormElement.prototype.real_submit.apply(f);
}

interceptor_setup();


基本上,脚本可以成功地修改post变量,但是当调用HTMLFormElement.prototype.real_submit.apply(f);提交修改后的表单时,请求缺少Post=Submit变量,并且提交失败。

我尝试删除e.stopPropagation()e.preventDefault()然后它有时会工作,但仍然会偶尔删除该帖子变量。

如果有人能指出我在这个方向上的正确方向,那将会很棒。 ;)

0 个答案:

没有答案