1

我们有一个 Facebook 应用程序,其中包含网络意图集成,以在用户发布关于他们的表现的推文时奖励积分。该应用程序在 Facebook 以外的所有浏览器以及在 Facebook 内运行时在除 IE9 之外的所有浏览器中运行都没有问题。这个问题似乎源于 Facebook 在 iframe 中运行代码的方式。

我们看到的具体错误发生在 hubclient.js 中的页面加载期间(第 7 行):无法获取属性 insertBefore 的值。

该代码基于https://dev.twitter.com/docs/intents/events集成到我们的应用程序中

在文档头中,我们有以下脚本来设置 twitter 平台 api:

<script type="text/javascript" charset="utf-8">
  window.twttr = (function (d,s,id) {
    var t, js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;
    js.src="//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);
    return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });
  }(document, "script", "twitter-wjs"));
</script>

然后我们在文档正文中使用了一个简单的关注按钮

<a href="https://twitter.com/clearcreativity" class="twitter-follow-button" data-show-count="false">Follow</a>

最后,我们有包装在 $(document).ready() 块中的事件绑定:

$(document).ready(function(){
    twttr.ready(function (twttr) {
    twttr.events.bind('tweet', function(event) {
            //Notify and potentially give credit for a tweet
        });
    });
});
4

1 回答 1

0

在这个问题上多次尝试不同的解决方案后,它似乎与在 iframe 中运行时平台脚本的异步加载有关。为了解决这个问题,我们简单地将平台 api 的加载移动到页面加载结束时的同步调用:

    <script src="https://platform.twitter.com/widgets.js"></script>
<body>

当然,请确保我们代码中对 twttr 的所有引用都包含在

$(document).ready();
于 2012-07-08T10:41:46.250 回答