Facebook javascript SDK共享版本从属性文件到jsp不工作[webapp]

Facebook javascript SDK Share version from property files to jsp not working [webapp]

本文关键字:jsp 工作 webapp 文件 SDK javascript 共享 版本 从属性 Facebook      更新时间:2023-09-26

我正在使用属性文件来管理应用程序id和版本。

下面是属性文件:

#Facebook APP ID & Version
#My Local
facebookShareAppId = xxxxxxxxxxx
#UAT
#facebookShareAppId = xxxxxxxxxxx
#QA
#facebookShareAppId = xxxxxxxxxxx

facebookShareVersion = v2.7

============================

我从控制器中获取属性的值使用我们的实用程序,我的控制器方法有这个:

String facebookAppId = PropertyFileReader.getProperty(PropertyFileConstants.PROP_SOCIALNETWORK, "facebookShareAppId");
String facebookShareVersion = PropertyFileReader.getProperty(PropertyFileConstants.PROP_SOCIALNETWORK, "facebookShareVersion");
page.addObject("facebookAppId", facebookAppId);
page.addObject("facebookShareVersion", facebookShareVersion);
return page;

============================

当我使用${facebookAppId}和${facebookShareVersion}检查它时,我的JSP然后获得值

<input id="facebookAppId" type="hidden" value = "${facebookAppId}"/>
<input id="facebookShareVersion" type="hidden" value = "${facebookShareVersion}"/>

当我尝试记录它,它显示我的当前值为facebookAppId,和facebookShareVersion。(当前版本为"v2.7")

=====================

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : ${facebookAppId},
      xfbml      : true,
      version    : ${facebookShareVersion}
    });
  };
</script>

当我输入这个时,它给了我一个错误:"未捕获的错误:指定的无效版本",但是当我将版本更改为静态字符串"v2.7"时,它工作了。有什么办法解决这个问题吗?

我也有这个(我实际上不知道它是做什么的):

<div id="fb-root"></div>
            <script>(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_US/sdk.js";
              fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));
            </script>
                            <!-- Your share button code -->
            <div class="fb-share-button" data-href="http://www.google.com/" data-layout="button" data-size="large" data-mobile-iframe="true"></div>
编辑:我添加了上面的代码

删除SDK的第二个嵌入,并将其转移到我的Javascript中,调整了js。src,从JSP中的隐藏元素添加了版本和appId,然后它就工作了。最终代码如下:

Javascript:

var appId = $("#facebookAppId").val();
var version = $("#facebookShareVersion").val();
    (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_US/sdk.js#xfbml=1&version="+ version + "&appId=" + appId;
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
JSP:

<input id="facebookAppId" type="hidden" value = "${facebookAppId}"/>
<input id="facebookShareVersion" type="hidden" value = "${facebookShareVersion}"/>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : ${facebookAppId},
      xfbml      : true,
      version    : ${facebookShareVersion}
    });
  };
</script>

现在可以从属性文件中检索版本和appId:)