【问题标题】:escaping ampersands in UIBinder (adbrite script)在 UIBinder 中转义 & 符号(adbrite 脚本)
【发布时间】:2011-04-17 03:56:27
【问题描述】:

我需要在 UIBinder 的一个 div 中集成以下脚本:

 <!-- Begin: adBrite, Generated: 2011-04-14 8:40:27  -->
 <script type="text/javascript">
 var AdBrite_Title_Color = '66B5FF';
 var AdBrite_Text_Color = '000000';
 var AdBrite_Background_Color = 'FFFFFF';
 var AdBrite_Border_Color = 'CCCCCC';
 var AdBrite_URL_Color = '008000';
 try{var AdBrite_Iframe=window.top!=window.self?2:1;var AdBrite_Referrer=document.referrer==''?document.location:document.referrer;AdBrite_Referrer=encodeURIComponent(AdBrite_Referrer);}catch(e){var AdBrite_Iframe='';var AdBrite_Referrer='';}
 </script>
 <span style="white-space:nowrap;"><script type="text/javascript">document.write(String.fromCharCode(60,83,67,82,73,80,84));document.write(' src="http://ads.adbrite.com/mb/text_group.php?sid=123&zs=123&ifr='+AdBrite_Iframe+'&ref='+AdBrite_Referrer+'" type="text/javascript">');document.write(String.fromCharCode(60,47,83,67,82,73,80,84,62));</script>
 <a target="_top" href="http://www.adbrite.com/mb/commerce/purchase_form.php?opid=123&afsid=1"><img src="http://files.adbrite.com/mb/images/adbrite-your-ad-here-leaderboard.gif" style="background-color:#CCCCCC;border:none;padding:0;margin:0;" alt="Your Ad Here" width="14" height="90" border="0" /></a></span>
 <!-- End: adBrite -->

GWT 编译器抱怨 & 符号,所以我将它们更改为 &amp;amp;

我还注意在文件顶部声明以下内容,以便正确解析 & 实体:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">

这至少允许我编译代码,但生成的页面呈现为&amp;amp; 而不是&amp;,这当然会破坏脚本。

我怎样才能正确地转义与号,以便脚本正常运行?有没有办法在我的加载器 html/jsp 中声明这个脚本,并让它呈现到我选择的 div 中?我在 Adbrite 的网站上找不到太多文档。

最后,Adbrite 真的有必要用String.fromCharCode 废话隐藏脚本来自远程站点的事实吗?据推测,这样做是为了防止某种 XSS 过滤起作用。

谢谢

【问题讨论】:

    标签: javascript gwt uibinder


    【解决方案1】:

    将您的 Javascript 代码放在 HTML cmets 之间。 将&amp;amp; 替换为&amp;amp;

    这里是更正的代码:

    <!-- Begin: adBrite, Generated: 2011-04-14 8:40:27 -->
            <script type="text/javascript"><!-- 
                var AdBrite_Title_Color = '66B5FF';
                var AdBrite_Text_Color = '000000';
                var AdBrite_Background_Color = 'FFFFFF';
                var AdBrite_Border_Color = 'CCCCCC';
                var AdBrite_URL_Color = '008000';
                try{var AdBrite_Iframe=window.top!=window.self?2:1;var
                AdBrite_Referrer=document.referrer==''?document.location:document.referrer;AdBrite_Referrer=encodeURIComponent(AdBrite_Referrer);}catch(e){var
                AdBrite_Iframe='';var AdBrite_Referrer='';}
      --></script>
    
     <span style="white-space:nowrap;">
     <script type="text/javascript"><!--  document.write(String.fromCharCode(60,83,67,82,73,80,84));document.write(' src="http://ads.adbrite.com/mb/text_group.php?sid=123&zs=123&ifr='+AdBrite_Iframe+'&ref='+AdBrite_Referrer+'" type="text/javascript">');document.write(String.fromCharCode(60,47,83,67,82,73,80,84,62)); --></script>
     <a target="_top" href="http://www.adbrite.com/mb/commerce/purchase_form.php?opid=123&amp;afsid=1"><img src="http://files.adbrite.com/mb/images/adbrite-your-ad-here-leaderboard.gif" style="background-color:#CCCCCC;border:none;padding:0;margin:0;" alt="Your Ad Here" width="14" height="90" border="0" /></a></span>
            <!-- End: adBrite -->
    

    【讨论】:

    • 嗯,这似乎没有帮助。查看生成的 DOM,我得到一个空脚本标记,然后图像的锚点在 URL 中有 \u0026。您意识到这是 GWT 中的 UIBinder,而不仅仅是纯 HTML,对吧?抱歉,如果我的问题不清楚。
    • 是的,我在 GWT 中使用 UIBinder 进行了测试。它工作得很好。我认为这可能与正在使用的编码字符集有关。我使用 UTF-8 编码对文件和 HTML 标头进行了此测试:&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt; 试试看。
    • DOM 中的 script 标签为空没有问题。该脚本将运行良好。您在项目文件和 GWT 项目的 HTML 标头中使用了哪种编码字符集?
    • 我已经有了您建议的元标记。占位符图片出现(“您的广告在此处”),但实际广告没有出现。当您尝试此操作时,您是否在 DOM 中获得了 \u0026 ?非常感谢您的帮助。
    • 你是对的。我在 DOM 中得到 \u0026 。使用&反而。就我而言,它有效,并被 & 取代。点击“您的广告在这里”图片就知道了。
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2016-10-19
    相关资源
    最近更新 更多