| 1234567891011121314151617181920212223242526 |
- <!doctype html>
- <html lang="zh-CN"><meta charset="utf-8"><title>Vue前端回归检查</title>
- <style>body{font:14px system-ui;background:#f5f7fa;color:#40566b;margin:24px}iframe{width:100%;height:760px;border:1px solid #dce4e9;border-radius:8px}pre{white-space:pre-wrap}.pass{color:#187b60}.fail{color:#b94f42}</style>
- <h1>Vue前端回归检查</h1><pre id="result">正在检查…</pre><iframe title="Frontend under test" src="/static/index.html"></iframe>
- <script>
- document.querySelector('iframe').addEventListener('load',async event=>{
- const frame=event.target.contentWindow, checks=[];
- const wait=async predicate=>{for(let n=0;n<100;n++){if(predicate())return;await new Promise(resolve=>setTimeout(resolve,50));}throw Error('页面加载超时');};
- const check=(condition,name)=>{if(!condition)throw Error(name);checks.push('PASS '+name);};
- try{
- await wait(()=>frame.document.querySelector('.session-button'));
- frame.document.querySelector('.session-button').click();
- await wait(()=>frame.document.querySelector('.markdown h1'));
- const doc=frame.document;
- check(doc.querySelector('.markdown h1').textContent==='Markdown 标题','Vue会话历史与Markdown标题');
- check(doc.querySelector('.markdown strong')?.textContent==='加粗' && doc.querySelector('.markdown em') && doc.querySelector('.markdown del'),'行内格式');
- check(doc.querySelector('.markdown ul ul li') && doc.querySelector('.markdown input:checked:disabled'),'嵌套列表与任务列表');
- check(doc.querySelector('.markdown blockquote') && doc.querySelector('.markdown-table table tbody td'),'引用与GFM表格');
- check(doc.querySelector('.markdown pre code')?.textContent.includes(' print("<hello>")'),'代码缩进与HTML原文');
- check(doc.querySelector('.markdown a')?.rel==='noopener noreferrer','外链属性');
- check(!doc.querySelector('.markdown script,.markdown style,.markdown svg,.markdown iframe,.markdown [onerror],.markdown [onload],.markdown a[href^="javascript:"]') && !frame.__xss,'HTML与危险URL清理');
- check([...doc.querySelectorAll('[role="tab"]')].some(tab=>tab.textContent.includes('智能体测试')),'智能体测试页入口');
- document.getElementById('result').className='pass';document.getElementById('result').textContent=checks.join('\n')+'\n\n'+checks.length+'项通过';
- }catch(error){document.getElementById('result').className='fail';document.getElementById('result').textContent=checks.join('\n')+'\nFAIL '+error.stack;}
- });
- </script></html>
|