[付费任务] 协助 Draft 插件中 Revive Ad Server 标签的 SCRIPT 标签渲染

摘要

基于官方 Discourse 广告插件的部分代码,我创建了一个 Revive 广告服务器插件的草稿。基本上,我移除了广告网络,并重构了自家广告代码(README 中已详细记录),使其从我们的 Revive 广告服务器提供标签,并过滤为桌面端或移动端广告(Revive 目前尚不支持响应式标签)。以下是当前的重新设计:

https://github.com/unixneo/neo-revive-discourse

状态:

  • <script> 标签(同步和异步)渲染存在问题,但 <iframe> 标签工作正常

待办事项:

  • 修复 <script> 标签和 <iframe> 标签的渲染问题

示例:

此 iframe 标签工作正常:

<!-- Revive Adserver iFrame Tag - Generated with Revive Adserver v4.2.0 -->
<iframe id='a41d6e46' name='a41d6e46' src='http://srv.adserver.com/www/delivery/afr.php?zoneid=63&amp;cb=INSERT_RANDOM_NUMBER_HERE' frameborder='0' scrolling='no' width='728' height='90'><a href='http://srv.adserver.com/www/delivery/ck.php?n=aa785d4b&amp;cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://srv.adserver.com/www/delivery/avw.php?zoneid=63&amp;cb=INSERT_RANDOM_NUMBER_HERE&amp;n=aa785d4b' border='0' alt='' /></a></iframe>

此异步 JS 标签无法渲染(这是我们通常使用的标签格式):

<!-- Revive Adserver Asynchronous JS Tag - Generated with Revive Adserver v4.2.0 -->
<ins data-revive-zoneid="63" data-revive-id="2d220f1e3f63403189face1b493bcc4b"></ins>
<script async src="//srv.adserver.com/www/delivery/asyncjs.php"></script>

同样,此 JS 标签也无法渲染:

<!-- Revive Adserver Javascript Tag - Generated with Revive Adserver v4.2.0 -->
<script type='text/javascript'><!--//<![CDATA[
   var m3_u = (location.protocol=='https:'?'https://srv.adserver.com/www/delivery/ajs.php':'http://srv.adserver.com/www/delivery/ajs.php');
   var m3_r = Math.floor(Math.random()*99999999999);
   if (!document.MAX_used) document.MAX_used = ',';
   document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
   document.write ("?zoneid=63");
   document.write ('&amp;cb=' + m3_r);
   if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
   document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
   document.write ("&amp;loc=" + escape(window.location));
   if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
   if (document.context) document.write ("&context=" + escape(document.context));
   if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
   document.write ("'>\u003c\/scr"+"ipt>");
//]]>--></script><noscript><a href='http://srv.adserver.com/www/delivery/ck.php?n=aef496cd&amp;cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://srv.adserver.com/www/delivery/avw.php?zoneid=63&amp;cb=INSERT_RANDOM_NUMBER_HERE&amp;n=aef496cd' border='0' alt='' /></a></noscript>

尝试的修复方法:

尝试过使用 htmlSafe() 和三重大括号,但未成功。我不明白为什么只有 iframe 标签能渲染,而 JS 标签却无法渲染!这似乎是一个“Ember.js”问题,但作为 Ember.js 和 Rails 的新手,我对此并不了解。

您需要在何时完成?

不着急,我们近期不打算使用它;这是我为“未来”构建的功能。

您能为此任务提供的预算是多少(美元)?

任何合理的报价,只要能帮我突破这个 Ember.js 渲染难题,我们都欢迎并感激。

备注:

感兴趣的朋友请注意,我不使用 DFP。单纯不喜欢它。Revive 对我们来说运行良好(自托管),但一旦此解决方案生效,它也应能顺利支持 DFP 及其他广告服务器标签,因此源代码将免费提供给所有有类似需求的人。

测试站点(仅用于临时测试):

测试站点已移除。

1 个赞

此 GIG 已完成:

成功通过以下方式将外部脚本直接添加到主题头部(使用一些 JS):

<script>
    var js_script = document.createElement('script');
    js_script.type = "text/javascript";
    js_script.src = "https://srv.adserver.com/www/delivery/asyncjs.php";
    js_script.async = true;
    document.getElementsByTagName('head')[0].appendChild(js_script);
</script>

然后在插件代码中仅调用 Revive Adserver 标签的以下部分,并指定广告区域,如下所示:

<div style='text-align: center;'>
<ins style='display:inline-block;' data-revive-zoneid="63" data-revive-id="2d220f1e3f63403189face1b493bcc4b"></ins>
</div>

谢谢!

附注:未能找到适用于 Ember.js 的解决方案,因为根据 Ember 文档,Handlebars 似乎不接受 <script> 标签。未来可能会尝试在 Ember.js 中实现此功能……

8 个赞