我们有一个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
});
});
});
答案 0 :(得分:0)
在这个问题上多次尝试不同的解决方案选项时,它似乎与在iframe中运行时平台脚本的异步加载有关。要解决此问题,我们只是在页面加载结束时将平台api的负载移动为同步调用:
<script src="https://platform.twitter.com/widgets.js"></script>
<body>
当然,确保我们代码中对twttr的所有引用都包含在
中$(document).ready();