如何全局覆盖 javascript 中 html 表单的提交
How to globally overwrite submit on html form in javascript
我今天为此苦苦挣扎了一整天,我发现了这个 http://greasemonkey.win-start.de/patterns/override-method.html 但它只有 50% 准确,所以我决定分享解决方案,因为它可能对 csrf 实施等例如有用。
任何类型的表单提交解决方案:
// form.submit() js 调用的代码 https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit
HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
function newSubmit() {
//add code here
this._submit();
}
HTMLFormElement.prototype.submit = newSubmit;
// 点击按钮类型提交的代码 https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/requestSubmit
function newRequestSubmit(submitter) {
if (submitter.srcElement.tagName === "FORM") {
// add code here
}
}
document.body.addEventListener("submit", newRequestSubmit);
对于 csrf 实现,覆盖 XMLHttpRequest.prototype.open 在 ajax 请求的情况下也很有用,方法是在 header 中设置 csrf:https://whosebug.com/a/56499250/7309871
我今天为此苦苦挣扎了一整天,我发现了这个 http://greasemonkey.win-start.de/patterns/override-method.html 但它只有 50% 准确,所以我决定分享解决方案,因为它可能对 csrf 实施等例如有用。
任何类型的表单提交解决方案:
// form.submit() js 调用的代码 https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit
HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
function newSubmit() {
//add code here
this._submit();
}
HTMLFormElement.prototype.submit = newSubmit;
// 点击按钮类型提交的代码 https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/requestSubmit
function newRequestSubmit(submitter) {
if (submitter.srcElement.tagName === "FORM") {
// add code here
}
}
document.body.addEventListener("submit", newRequestSubmit);
对于 csrf 实现,覆盖 XMLHttpRequest.prototype.open 在 ajax 请求的情况下也很有用,方法是在 header 中设置 csrf:https://whosebug.com/a/56499250/7309871