You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CEF3执行JS广告拦截代码报Unexpected identifier错误排查

语法错误根因

你复制的内容是C#侧拼接JS字符串的业务代码片段,不是可直接执行的纯JS代码,直接传入JS引擎执行必然报错:

  • 片段里混杂了C#/VB的服务端调用语法Interaction.IIf(browser.Address.Contains("youtube.com"), "'iframe','marquee'", "'iframe','embed','marquee'"),这部分是宿主语言逻辑,JS引擎无法识别,解析到裸露的Interaction标识符时就会抛出SyntaxError: Unexpected identifier
  • 原始片段是C#中用逗号分隔的三段字符串拼接赋值结构,你没有提前在宿主代码里完成拼接、条件判断的逻辑,直接把整段C#代码传给了JS执行环境。
修复方案

先在你的C#/VB业务代码里判断当前页面地址是否为youtube.com,生成对应要拦截的标签列表,再拼接出纯JS字符串传入执行。
压缩后的可直接执行的纯JS代码如下:

  • 非Youtube站点使用(拦截iframe、embed、marquee标签+标准广告尺寸图片):
function C(d,o){v=d.createElement('div');o.parentNode.replaceChild(v,o);}function A(d){for(j=0;t=['iframe','embed','marquee'][j];++j){o=d.getElementsByTagName(t);for(i=o.length-1;i>=0;i--)C(d,o[i]);}g=d.images;adSizeMap={'21x21':1,'48x48':1,'60x468':1,'88x31':1,'88x33':1,'88x62':1,'90x30':1,'90x32':1,'90x90':1,'100x30':1,'100x37':1,'100x45':1,'100x50':1,'100x70':1,'100x100':1,'100x275':1,'110x50':1,'110x55':1,'110x60':1,'110x110':1,'120x30':1,'120x60':1,'120x80':1,'120x90':1,'120x120':1,'120x163':1,'120x181':1,'120x234':1,'120x240':1,'120x300':1,'120x400':1,'120x410':1,'120x500':1,'120x600':1,'120x800':1,'125x40':1,'125x60':1,'125x65':1,'125x72':1,'125x80':1,'125x125':1,'125x170':1,'125x250':1,'125x255':1,'125x300':1,'125x350':1,'125x400':1,'125x600':1,'125x800':1,'126x110':1,'130x60':1,'130x65':1,'130x158':1,'130x200':1,'132x70':1,'140x55':1,'140x350':1,'145x145':1,'146x60':1,'150x26':1,'150x60':1,'150x90':1,'150x100':1,'150x150':1,'155x275':1,'155x470':1,'160x80':1,'160x126':1,'160x600':1,'180x30':1,'180x66':1,'180x132':1,'180x150':1,'194x165':1,'200x60':1,'220x100':1,'225x70':1,'230x30':1,'230x33':1,'230x60':1,'234x60':1,'234x68':1,'240x80':1,'240x300':1,'250x250':1,'275x60':1,'280x280':1,'300x60':1,'300x100':1,'300x250':1,'320x50':1,'320x70':1,'336x280':1,'350x300':1,'350x850':1,'360x300':1,'380x112':1,'380x250':1,'392x72':1,'400x40':1,'400x50':1,'425x600':1,'430x225':1,'440x40':1,'464x62':1,'468x16':1,'468x60':1,'468x76':1,'468x120':1,'468x248':1,'470x60':1,'480x400':1,'486x60':1,'545x90':1,'550x5':1,'600x30':1,'720x90':1,'720x300':1,'725x90':1,'728x90':1,'734x96':1,'745x90':1,'750x25':1,'750x100':1,'750x150':1,'850x120':1};for(k=g.length-1;k>=0;k--)if(adSizeMap[g[k].width+'x'+g[k].height])C(d,g[k]);}A(document);for(f=0;z=frames[f];++f){try{A(z.document)}catch(e){}}
  • Youtube站点使用:把上述代码里标签数组的'embed',删掉,改为['iframe','marquee']即可,避免误拦截正常视频播放器。
使用提示
  • 这段拦截逻辑年代久远,仅靠标签名和固定图片尺寸识别广告,拦截率低且存在误删正常元素的可能,仅适合做基础功能演示
  • 遍历子frame时必须加try-catch捕获跨域权限异常,否则碰到跨域iframe会直接中断脚本执行
  • 若需要更完善的广告拦截能力,建议用CEF的资源请求拦截接口匹配广告规则库,不要在页面注入JS做DOM删除,性能和拦截率都很差

内容的提问来源于stack exchange,提问作者tmighty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:27:14