feat(clickTtHttpPageRoutes): enhance form submission handling and logging
- Added logic to track the last submitter for forms, improving the accuracy of form data submissions. - Implemented checks to append hidden fields for submitters without existing form fields, ensuring all relevant data is captured. - Enhanced logging for form submissions to include submitter details, improving traceability and debugging capabilities during proxy interactions.
This commit is contained in:
@@ -317,8 +317,14 @@ function injectProxyNavigationScript(html, proxyBaseUrl, pageBaseUrl, sid) {
|
||||
'if(action)return normalizeUrl(action,PAGE_BASE_URL);',
|
||||
"return normalizeUrl((form&&form.getAttribute?form.getAttribute('action'):null)||PAGE_BASE_URL,PAGE_BASE_URL);",
|
||||
'}',
|
||||
'var lastSubmitter=null;',
|
||||
"document.addEventListener('click',function(event){",
|
||||
"var anchor=event.target&&event.target.closest?event.target.closest('a[href]'):null;",
|
||||
"var submitControl=event.target&&event.target.closest?event.target.closest('button, input[type=\"submit\"], input[type=\"image\"]'):null;",
|
||||
'if(submitControl){',
|
||||
'lastSubmitter=submitControl;',
|
||||
"try{console.log('[ClickTT Proxy] submit control click',{name:submitControl.name||null,value:submitControl.value||null,type:submitControl.type||submitControl.tagName,formAction:submitControl.getAttribute?submitControl.getAttribute('formaction'):null,text:(submitControl.textContent||'').trim().slice(0,120)});}catch(e){}",
|
||||
'}',
|
||||
'if(!anchor||event.defaultPrevented)return;',
|
||||
"var targetUrl=normalizeUrl(anchor.getAttribute('href'),PAGE_BASE_URL);",
|
||||
'if(!targetUrl||!shouldProxyUrl(targetUrl))return;',
|
||||
@@ -329,9 +335,20 @@ function injectProxyNavigationScript(html, proxyBaseUrl, pageBaseUrl, sid) {
|
||||
"document.addEventListener('submit',function(event){",
|
||||
'var form=event.target;',
|
||||
"if(!form||!form.tagName||form.tagName.toLowerCase()!=='form')return;",
|
||||
'var submitter=event.submitter||null;',
|
||||
'var submitter=event.submitter||lastSubmitter||null;',
|
||||
'var targetUrl=getSubmitTarget(form,submitter);',
|
||||
'if(!targetUrl||!shouldProxyUrl(targetUrl))return;',
|
||||
'if(submitter&&submitter.form===form&&submitter.name){',
|
||||
"var hasField=!!form.querySelector('[name=\"'+CSS.escape(submitter.name)+'\"]');",
|
||||
'if(!hasField){',
|
||||
"var hidden=document.createElement('input');",
|
||||
"hidden.type='hidden';",
|
||||
'hidden.name=submitter.name;',
|
||||
"hidden.value=submitter.value||'';",
|
||||
"hidden.setAttribute('data-clicktt-submit-proxy','1');",
|
||||
'form.appendChild(hidden);',
|
||||
'}',
|
||||
'}',
|
||||
'try{',
|
||||
'var formDataEntries=[];',
|
||||
'if(window.FormData){',
|
||||
@@ -367,8 +384,20 @@ function injectProxyNavigationScript(html, proxyBaseUrl, pageBaseUrl, sid) {
|
||||
'if(window.HTMLFormElement&&window.HTMLFormElement.prototype&&window.HTMLFormElement.prototype.submit){',
|
||||
'var nativeSubmit=window.HTMLFormElement.prototype.submit;',
|
||||
'window.HTMLFormElement.prototype.submit=function patchedSubmit(){',
|
||||
'var targetUrl=getSubmitTarget(this,null);',
|
||||
'try{console.log("[ClickTT Proxy] direct form.submit()",{action:this.getAttribute("action"),targetUrl:targetUrl});}catch(e){}',
|
||||
'var submitter=lastSubmitter&&lastSubmitter.form===this?lastSubmitter:null;',
|
||||
'var targetUrl=getSubmitTarget(this,submitter);',
|
||||
'if(submitter&&submitter.name){',
|
||||
"var hasField=!!this.querySelector('[name=\"'+CSS.escape(submitter.name)+'\"]');",
|
||||
'if(!hasField){',
|
||||
"var hidden=document.createElement('input');",
|
||||
"hidden.type='hidden';",
|
||||
'hidden.name=submitter.name;',
|
||||
"hidden.value=submitter.value||'';",
|
||||
"hidden.setAttribute('data-clicktt-submit-proxy','1');",
|
||||
'this.appendChild(hidden);',
|
||||
'}',
|
||||
'}',
|
||||
'try{console.log("[ClickTT Proxy] direct form.submit()",{action:this.getAttribute("action"),targetUrl:targetUrl,submitterName:submitter&&submitter.name?submitter.name:null,submitterValue:submitter&&submitter.value?submitter.value:null});}catch(e){}',
|
||||
"if(targetUrl&&shouldProxyUrl(targetUrl)){this.setAttribute('action',buildProxyUrl(targetUrl));}",
|
||||
'return nativeSubmit.apply(this,arguments);',
|
||||
'};',
|
||||
|
||||
Reference in New Issue
Block a user