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:
Torsten Schulz (local)
2026-03-11 12:37:01 +01:00
parent 3ea9cdd611
commit e5e1ccba82

View File

@@ -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);',
'};',