内容分四块: 1、产品规划产出 —— MCN 短视频整合营销工作台的①段五份(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)、②段两份(2a 功能/2b 布局)、③段界面(DESIGN.md 契约与令牌表 + mcn-workbench.html 原型 + 实测/会诊/审查三份 + 23 张闸门截图)。 2、开源竞品调研 —— 5 个内容工作台项目的取证原始件与 1b 系列分析文档。 3、参考资料 —— 竞品视频抽帧 1145 张 + 2 个源视频 + 功能点截图。 4、机制侧 —— 协作脚本与状态台账、工作区记忆日志、抽帧/OCR 脚本。 .gitignore 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
48 lines
1.6 KiB
HTML
48 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN"><head><meta charset="utf-8"><title>probe</title></head>
|
|
<body>
|
|
<div id="out"></div>
|
|
<button id="b" data-act="TEST">点我</button>
|
|
<script>
|
|
var L=[];
|
|
function log(s){ L.push(s); document.getElementById('out').textContent=L.join('\n'); }
|
|
|
|
log('loadHash=['+location.hash+']');
|
|
|
|
/* ① 直接写 location.hash */
|
|
var h1=location.hash;
|
|
location.hash='#/p/p2/ok';
|
|
log('① 直接赋值: before=['+h1+'] after=['+location.hash+']');
|
|
|
|
/* ② history.replaceState */
|
|
var rs='ok';
|
|
try{ history.replaceState(null,'','#/p/p9/ok'); }catch(e){ rs='throw:'+(e&&e.name)+'/'+e.message; }
|
|
log('② replaceState='+rs+' hashNow=['+location.hash+']');
|
|
|
|
/* ③ history.pushState */
|
|
var ps='ok';
|
|
try{ history.pushState(null,'','#/p/p7/ok'); }catch(e){ ps='throw:'+(e&&e.name); }
|
|
log('③ pushState='+ps+' hashNow=['+location.hash+']');
|
|
|
|
/* ④ document 级委托 click + 合成事件 */
|
|
var fired=[];
|
|
document.addEventListener('click', function(ev){
|
|
var t=ev.target.closest('[data-act]');
|
|
if(!t) { fired.push('no-data-act'); return; }
|
|
fired.push('handled:'+t.dataset.act);
|
|
location.hash='#/p/p3/ok';
|
|
});
|
|
var b=document.getElementById('b');
|
|
b.dispatchEvent(new MouseEvent('click',{bubbles:true}));
|
|
log('④ 合成点击: fired=['+fired.join(',')+'] hash=['+location.hash+']');
|
|
|
|
/* ⑤ 原生 click() 方法 */
|
|
var fired2=[];
|
|
document.addEventListener('click', function(ev){ if(ev.target.id==='b') fired2.push('native-click-ok'); });
|
|
b.click();
|
|
log('⑤ el.click(): fired=['+fired2.join(',')+'] hash=['+location.hash+']');
|
|
|
|
log('finalHash=['+location.hash+'] stylesheets='+document.styleSheets.length);
|
|
</script>
|
|
</body></html>
|