Facebook: неверная наценка на FBML - PullRequest
5 голосов
/ 16 июня 2010

Я использую валидатор W3C XHTML для проверки своих сайтов и получаю сообщения об ошибках на страницах с FBML.Большая часть таких ошибок - символ «&».Поскольку значения и атрибуты FBML генерируются на лету, у меня нет возможности правильно закодировать символ перед его отображением.

Вопрос: Есть ли способ сообщить мне, чтобы Facebook Connect выполнил разметкуправильно?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 13 июля 2010

Попробуйте вставить код facebook в CDATA:

<script type="text/javascript">
/* <![CDATA[ */ 
document.write('<fb:login-button length="long" size="large" show-faces="true" perms="" onlogin="window.location=\'<?=current_url()?>\'"></fb:login-button>'); 
/* ]]> */
</script>
2 голосов
/ 17 июня 2010

Короче, не так далеко, как я знаю.Что еще хуже, теги fb: * тоже не проверяются, даже если вы сделаете ваш HTML-тег похожим на это:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">

Если это огромная проблема для вас, вы можетеизбавьтесь от размещения разметки, не совместимой с XHTML, в своем собственном iframe со строгим HTML-4.01, чтобы, в сущности, подметать дерьмо под ковром.

Это может быть полезно:

http://wiki.developers.facebook.com/index.php/Facebook_Platform_for_Mobile:_XHTML

Над этим тоже работал какой-то немецкий парень:

http://translate.google.com/translate?js=y&prev=_t&hl=en&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fwww.ka-mediendesign.de%2Fblog%2Ffbml-in-xhtml-neue-version%2F&sl=de&tl=en

1 голос
/ 26 августа 2010

Вот как я это делаю. Оберните все теги fbml внутри и затем используйте js, чтобы просто раскомментировать код fbml с помощью javascript. Вот пример:

Markup:

<P class="fbreplace" style="display: none;">
    <!-- FBML
        <fb:like layout="standard" show_faces="false" colorscheme="light"></ fb: like>
    ->
</ p>

JS (требуется JQuery):

$(document).ready(function() {
  $(".fbreplace").html.replace(/<!-- FBML /g, "");
  $(".fbreplace").html.replace(/ -->/g, "");
  $(".fbreplace").style.display = "block";
});
...