在Facebook上分享时,显示角括号而不是内容

时间:2015-01-14 13:05:16

标签: angularjs angularjs-scope

AngularJS将内容精美地呈现为标题和元标记,但是当我与Facebook或谷歌共享时,在弹出窗口中它会显示角度{{}}。 enter image description here

代码:

<div ng-controller="MyCtrl">
 <title>{{mDetails.display1}} - Subtitle</title> 
<meta name="description" content="{{mDetails.display1}} - {{mDetails.address1}} , {{mDetails.city}}, {{mDetails.state}}, {{mDetails.country}}">
.
.

注意:我已使用ng-cloak

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

另外两个问题: og meta tags, social buttons and angularjs

方法1: -

这不能使用javascript完成。有些人认为Facebook正在阅读当前页面上的内容。不是。它使用相同的url(来自window.location.href)使用它的Scraper向您的服务器发出单独的请求,并且Facebook Scraper不运行javascript。这就是为什么在点击像Facebook分享按钮这样的东西时获得{{page_title}}的原因。您的内容必须由服务器生成,因此当Facebook访问该网址时,它可以预先获得所需的内容,而无需使用javascript。您可以通过几种方式解决服务器端渲染问题。

You can allow your server side technology to render the content.
You can use the PhantomJS approach https://github.com/steeve/angular-seo.

方法2: -

您还可以重新呈现Facebook小部件。使用他们的解析方法:

FB.XFBML.parse();

在完成你的角色之后

。它没有为我的分享按钮工作(但是!!),但我在喜欢上测试它,这很酷。基本上它重新扫描DOM并呈现Facebook小部件。你也可以传递一个单独的元素,比如这个指令:

'use strict';    
angular.module('ngApp')
.directive("fbLike", function($rootScope) {
    return function (scope, iElement, iAttrs) {
        if (FB && scope.$last) {
           FB.XFBML.parse(iElement[0]);
        }
    };
});

在创建角度转发器中的最后一个元素时,此片段会重新扫描用于html5 facebook fb类小部件的DOM。


在同一背景下另一个被接受的答案: - https://stackoverflow.com/a/24086652/1366216

修改

我在服务器端为元标记实现了json,但这是一个开销,因为对于页面数据,仍然有ajax调用。

$mid=$_GET['id'];
    $mJSON = file_get_contents($homeurl."/json/getdetail.php?mid=".$mid);
    $mObject = json_decode($mJSON, true);
    if ($mObject['ID'] != undefined && $mObject['ID'] != '') {
      <meta property="og:title" content="<?php echo $mObject['display1'];?>"/>
      <meta property="og:description" content="<?php echo .$mObject['display2']; ?>"/>
     }

答案 1 :(得分:0)

对我有用的一种可能性就是有一个&#34;后退&#34;对于FB描述(因此它将是一个通用描述,显示何时加载角度)。我用两个ng-if。

实现了这个目的
<meta ng-if="mDetails.display1" property="og:title" content="{ mDetails.display1 + "- Subtitle"}}">
<meta ng-if="!mDetails.display1" property="og:title" content="A generic title">

每当有两个具有相同标题的元描述时,FB将采用最后一个。渲染后,googlebot只能看到非默认值。