当作为Facebook应用程序运行时(即在iFrame中),Twitter脚本在IE9中失败

时间:2012-07-07 15:15:05

标签: facebook twitter internet-explorer-9

我们有一个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
        });
    });
});

1 个答案:

答案 0 :(得分:0)

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

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

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

$(document).ready();