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