экранирование амперсандов в UIBinder (adbrite script)

Мне нужно интегрировать следующий скрипт внутри div в UIBinder:

 <!-- 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;.

Я также позаботился о том, чтобы объявить следующее в верхней части моего файла, чтобы сущность амперсанда могла быть правильно разрешена:

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

По крайней мере, это позволяет мне скомпилировать код, но результирующая страница отображается с &amp; вместо &, что, конечно, нарушает сценарий.

Как я могу правильно избежать амперсандов, чтобы скрипт работал правильно? Есть ли способ объявить этот скрипт в моем загрузчике html/jsp и сделать так, чтобы он отображался в div по моему выбору? Я не смог найти много документации на сайте Adbrite.

И, наконец, действительно ли необходимо, чтобы Adbrite пытался скрыть тот факт, что сценарий поступает с удаленного сайта с String.fromCharCode чепухой? Предположительно, это делается для предотвращения срабатывания какой-либо XSS-фильтрации.

Спасибо


person George Armhold    schedule 14.04.2011    source источник


Ответы (1)


Поместите код Javascript между комментариями HTML. Замените & на &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 -->
person Italo Borssatto    schedule 14.04.2011
comment
Хм, похоже, это не помогает. Глядя на результирующий DOM, я получаю пустой тег script, а затем якорь для изображения имеет & в URL-адресе. Вы понимаете, что это UIBinder в GWT, а не просто HTML, верно? Извините, если я был неясен в своем вопросе. - person George Armhold; 15.04.2011
comment
Да, я провел тест, используя UIBinder в GWT. И это работало нормально. Я думаю, что это может быть связано с используемой кодировкой enconding. Я сделал этот тест, используя кодировку UTF-8 для файлов и в заголовке HTML: <meta http-equiv="content-type" content="text/html; charset=UTF-8"> Попробуйте это. - person Italo Borssatto; 15.04.2011
comment
Нет проблем с пустым тегом script в DOM. Скрипт будет работать нормально. Какую кодировку вы используете в файлах проекта и в заголовке HTML вашего проекта GWT? - person Italo Borssatto; 15.04.2011
comment
У меня уже есть метатег, который вы предложили. Изображение-заполнитель появляется (ваша реклама здесь), но фактическая реклама не появляется. Когда вы попробовали это, вы получили & в DOM? Спасибо большое за помощь. - person George Armhold; 15.04.2011
comment
Ты прав. Я получаю & в DOM. Используйте вместо этого. В моем случае это сработало и было заменено на &. Нажатие на изображение вашего объявления здесь работает. - person Italo Borssatto; 16.04.2011
comment
Я создал пустую HTML-страницу с вашим кодом, и единственное, что я вижу, это изображение вашей рекламы здесь. Там нет дополнительной рекламы. - person Italo Borssatto; 16.04.2011
comment
Замена &-› работает для тега привязки, но не для встроенного скрипта. Я думаю, что GWT почему-то недостаточно умен, чтобы выполнить замену в строке, поэтому параметры «zs» и «ifr» не установлены должным образом. Я думаю, что вы не видите настоящую рекламу на HTML-странице, потому что я очистил параметры для «sid» и «zs»; когда я использую реальные значения и размещаю их на HTML-странице, я получаю рекламу. Извините, если это привело к путанице, но я не хотел, чтобы кто-то копировал/вставлял этот блок кода и вызывал проблемы с нашим идентификатором Adbrite. Я экспериментирую с использованием JSNI для установки содержимого скрипта, но решения пока нет. - person George Armhold; 18.04.2011