Подтвердить что ты не робот

Новая функция Facebook как кнопка HTML-проверка

После добавления новой кнопки facebook, как на моей странице, она больше не проверяет использование строгого стандарта XHTML. Две ошибки, с которыми я сталкиваюсь, следующие:

  • Все теги мета-свойств говорят, что свойства атрибута отсутствуют;
  • Все переменные, используемые в подобной кнопке, перечислены, что для этого нет атрибутов. Строка выглядит следующим образом:

    <fb:like href="#" onclick="location.href='http://www.pampamanta.org'; return false;" layout="button_count" show_faces="false" width="120" action="like" font="arial" colorscheme="light"></fb:like>

4b9b3361

Ответ 1

Вот решение для необмена типа документа:

Как было предложено zerkms, добавление пространства имен "fb" применяется только для атрибутов "fb:". Атрибут "свойство" метатега остается недопустимым XHTML.

Как вы знаете, Facebook основывается на соответствии RDFa, поэтому вы можете использовать следующий doctype:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 

Использование RDFa приносит больше проблем, чем проблема с исправлением FB в большинстве случаев.

как предположил _timm, динамическая запись метатегов в dom не имеет никакого смысла. Одним из основных применений этих мета-тегов fb является разбор FB-бота целевой страницы "share" или "i like" (страница действия) для предоставления пользовательских названий, изображений и ярлыков привязки для автобизнеса facebok wall post. Учитывая этот факт и учитывая тот факт, что facebook, безусловно, использует простой выбор страницы для чтения в поставляемом html-ответе без какой-либо возможности разбора связанного мета-тега с помощью javascript, предполагаемая функциональность просто терпит неудачу.

Теперь существует довольно простое исправление, обеспечивающее компромисс между проверкой XHTML и успешным анализом на facebook: оберните метатеку facebook в комментариях html. Это в обход парсера w3c и facebook все еще распознает метатеги, заставляя игнорировать комментарий.

<!--
<meta property="og:image" content="myimage.jpg" />
<meta property="og:title" content="my custom title for facebook" />
-->

Ответ 2

Начиная с сегодняшнего дня вы также можете использовать HTML5-совместимую разметку

например. вместо

<fb:like href="example.org">

вы можете сделать

<div class="fb-like" data-href="example.org">

Поскольку атрибуты data- * действительны в HTML5

Ответ 3

Просто выполните проверку, если кто-то использует метод комментариев. Facebook в настоящее время соблюдает комментарии, поэтому обтекание мета-тегами свойств в комментариях заставит Facebook игнорировать их. Если вы проверяете свои страницы с помощью URL-адреса Facebook, вы можете увидеть, что они не используют метатеги с комментариями.

Ответ 4

FBML не будет проверять, так как он недействителен XHTML. Валидатор W3C не знает, что с ним делать. Ошибки могут быть безопасно проигнорированы.

Если вы должны должны иметь проверку, вы можете использовать тег <script> для вывода FBML вместо прямого включения его в HTML-страницу.

Ответ 5

@Эрик Надеюсь, вы в конце концов нашли то, что искали.

Интеграция в Twitter имеет свои трудности, если вы хотите предоставить разработчикам возможность проверять независимо от XHTML Strict 1.0 или HTML5. С другой стороны, Facebook не имеет права использовать свои собственные теги FBML.

В нашем последнем проекте мы с моим другом Джейсоном знали наверняка две вещи:

  • Мы собирались проверить XHTML Strict 1.0 с помощью Facebook Like Button
  • Мы не собирались добавлять Технический долг, мотивируя наш DOCTYPE или xmlns

Решение заключается в использовании гибкого асинхронного модуля JavaScript. К счастью, у нас была помощь и руководство: http://techoctave.com/c7/posts/40-xhtml-strict-tweet-button-and-facebook-like-button

Ответ 6

Вы пытались добавить xmlns:fb="http://www.facebook.com/2008/fbml"?

Ответ 8

Для доз, которые используют "<javascript... document.write... "document.write не является допустимой процедурой DOM, поэтому в Fire Fox и Chrome, если вы используете ее в XML/XHTML Strict с типом контента, поскольку text/xml не работают.

Действительный DOM aproach, который работает для меня:

<div id="FbCont">
        <script src="http://connect.facebook.net/en_US/all.js#xfbml=1" type="text/javascript"></script>

        <script type="text/javascript">
<!--//--><![CDATA[//><!--
var fb = document.createElement('fb:like'); 
fb.setAttribute("href","http://www.cirugia-obesidad.mx"); 
fb.setAttribute("layout","button_count");
fb.setAttribute("show_faces","true");
fb.setAttribute("width","100");
fb.setAttribute("font","arial");
document.getElementById("FbCont").appendChild(fb);
//--><!]]>
</script>

        </div>

Надеюсь, что эта работа для других.

Велч

Ответ 9

RE: Welcho

Найденный тип script вызывал ошибку для меня (XHTML 1.0 Transitional). Также добавляется для тех, кому это может не хватать.

Ваш лучший и самый простой в использовании, который я видел в Интернете на сегодняшний день. Посмотрев снова - ха! ты лучший:)

Приветствия и thsks:)

<div id="fb-root"></div>   

<div id="FbCont">
<script type="text/javascript" 
src="http://connect.facebook.net/en_US/all.js#appId=XYOURIDXyourapID=1">
</script>
<script type="text/javascript">
<!--//--><![CDATA[//>
<!--
var fb = document.createElement('fb:like'); 
fb.setAttribute("href","http://www.wakawakblahblah.com"); 
// fb.setAttribute("layout","button_count");
fb.setAttribute("send","true");
fb.setAttribute("action","recommended");
fb.setAttribute("show_faces","false");
fb.setAttribute("width","280");
fb.setAttribute("font","trebuchet ms");
document.getElementById("FbCont").appendChild(fb);
//--><!]]>
</script>
</div>

Ответ 10

Всегда комментируйте это.

для fb: например

<script language="javascript" type="text/javascript">
//<![CDATA[
document.write('<fb:like href="http://www.c-p-p.net" layout="button_count" show_faces="false" width="90" action="like" font="arial" colorscheme="light"></fb:like>');
//]]>
</script>

также Мета-данные в заголовке

<!--
<meta property="og:title" content=" some title" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://c-p-p.net/" />
<meta property="og:image" content="site image" />
<meta property="og:site_name" content="site name" />
<meta property="og:description" content="description text" />
<meta property="fb:admins" content="some number" />
-->

отредактируйте тег javascript add type = "text/javascript"

<script type="text/javascript">(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_EN/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

и для версии iframe

<script language="javascript" type="text/javascript">
//<![CDATA[
document.write('<iframe src="//www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%..... allowTransparency="true"></iframe>');
//]]>
</script>

он работает на моем веб-сайте http://c-p-p.net

Ответ 11

Я недавно использовал:

<script type="text/javascript">
document.write('<fb:like href="http://www.mywebsite.co.uk" layout="button_count" show_faces="true" width="100"></fb:like>');
</script>   

и кажется, что он работает нормально, даже если он немного вонючий.

Ответ 12

Хорошо, пройдя буквально сотни этих сообщений, я наконец нашел быстрый и простой способ получить действительную страницу с помощью кнопки Like (или любого другого виджета facebook) на ней.

Всего несколько строк кода, посмотрите http://www.liormark.com/develop/development-articles/facebook-fbml-w3c-validation-solved

Ответ 13

Вот хорошие решения. Если вы собираетесь использовать document.write, используйте его, как показано ниже, и он будет корректно проверяться

<script type="text/javascript">
//<![CDATA[
(function() {
    document.write('<a href="https://twitter.com/share" data-count="vertical" data-via="siteripe">Tweet</a>');
    var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'http://platform.twitter.com/widgets.js';
    s1.parentNode.insertBefore(s, s1);
})();
//]]>
</script>

Ответ 14

Я использовал этот код, и он действителен для W3C Validator.

<script type="text/javascript">
<!--//--><![CDATA[//><!--
    document.write('<fb:like href="http://www.pampamanta.org" layout="button_count" show_faces="false" width="120" action="like" font="arial" colorscheme="light"></fb:like>');
    //--><!]]>
</script> 

Ответ 15

Вот чистое решение (трюк) для проверки достоверности любых тегов или не распознанных кодов!

Я использую smarty как механизм шаблонов, но это можно сделать так же, если вы этого не сделаете!

Я придумал больше трюка, а не решение (потому что его пока нет) и просто сделал W3C Validator для прохождения проверки просто НЕ показывая эти мета-строки.

Когда валидатор ссылается на мою страницу, используя PHP, я не представляю контент, который не распознается W3C Validator. Я просто делаю это путем извлечения информации заголовков, которая отправляется W3C Validator, которая является пользовательским агентом и является W3C_Validator/version.

  • Создайте функцию PHP и назначьте ее Smarty:

    function User_Agent_Check($user_agent) {
      $user_agent_check = strpos($_SERVER['HTTP_USER_AGENT'], $user_agent);
        if ($user_agent_check === false) {
            return false;
        } else {
            return true;
        }
    }
    
  • Затем проверьте пользовательский агент:

    if (User_Agent_Check("W3C_Validator")) {
       $smarty->assign('W3C', "1");
     } else {
       $smarty->assign('W3C', "0");
    }
    
  • Затем в шаблоне Smarty вы используете (если вы не используете Smarty, просто "эхо" контент с PHP):

    {if $W3C == 0}
     <meta property="og:url" content="">
     <meta property="og:title" content="">
     <meta property="og:description" content="">
     <meta property="og:type" content="video">
     <meta property="og:image" content="">
     <meta property="og:video" content="">
     <meta property="og:video:type" content="application/x-shockwave-flash">
     <meta property="og:video:width" content="1920">
     <meta property="og:video:height" content="1080">
     <meta property="og:site_name" content="">
     <meta property="fb:app_id" content="">
     <meta name="twitter:card" content="">
     <meta name="twitter:site" content="">
     <meta name="twitter:player" content="">
     <meta property="twitter:player:width" content="1920">
     <meta property="twitter:player:height" content="1080">
    {/if}
    

Когда Validator пытается проверить вашу страницу, те метатеги просто не выводятся на страницу! Когда какой-либо другой пользовательский агент видит вашу страницу, эти коды выводятся как обычно! Вы можете сделать это для Facebook Like Button или для любых метаданных OG - фактически для чего-либо еще.

Это было для меня правильное решение zeitgeist!