Javascript 如何阻止我的Facebook共享窗口被弹出窗口拦截器阻止?

Javascript 如何阻止我的Facebook共享窗口被弹出窗口拦截器阻止?,javascript,facebook,facebook-graph-api,facebook-javascript-sdk,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,当一个函数被称为onClick of Facebook share按钮时,我的Facebook共享窗口就会出现 问题是Facebook窗口试图出现,但被弹出窗口拦截器阻止 这是我第一次创建共享窗口。是否有一个简单的解决方案来绕过弹出窗口阻止程序 以下是触发该功能的按钮: <button class="share-now" onclick="fb_callout();"> 下面是调用的函数: <script> function fb_callout() {

当一个函数被称为onClick of Facebook share按钮时,我的Facebook共享窗口就会出现

问题是Facebook窗口试图出现,但被弹出窗口拦截器阻止

这是我第一次创建共享窗口。是否有一个简单的解决方案来绕过弹出窗口阻止程序

以下是触发该功能的按钮:

<button class="share-now" onclick="fb_callout();">

下面是调用的函数:

<script>
 function fb_callout() {
     (function(d){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook.net/en_US/all.js";
         ref.parentNode.insertBefore(js, ref);
         }(document));
     }
  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      appId      : '162280254223002', // App ID from the App Dashboard
      xfbml   : true,
      version : 'v2.5',
      status     : true
    });

    // Additional initialization code such as adding Event Listeners goes here
    FB.ui(
      {
        method: 'feed',
        href: 'http://www.example.com',
        name: 'Example',
        link: 'http://www.example.com',
        picture: 'http://image.png',
        caption: 'Caption',
        description: 'words go here'
      },
      function(response) {
        if (response && response.post_id) {
          alert('Post was published.');
        } else {
          alert('Post was not published.');
        }
      }
    );
  };
  </script> 

函数fb_callout(){
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
}
window.fbAsyninit=函数(){
//初始化FBJSSDK
FB.init({
appId:'16228025423002',//应用程序仪表板中的应用程序ID
xfbml:是的,
版本:“v2.5”,
状态:正确
});
//附加的初始化代码(如添加事件侦听器)如下所示
FB.ui(
{
方法:“提要”,
href:'http://www.example.com',
名称:“示例”,
链接:'http://www.example.com',
图片:'http://image.png',
标题:"标题",,
描述:'文字在这里'
},
功能(响应){
if(应答和应答后id){
警报(“发布帖子”);
}否则{
警报(“未发布帖子”);
}
}
);
};

现在,您尝试打开的弹出窗口不是用户交互,而是异步回调函数。当然,弹出窗口拦截器会检测到并阻止弹出窗口(有很好的理由)。你需要做两件事:

  • 在页面加载时加载JSSDK,而不是在用户交互时加载
  • 直接在用户交互时调用
    FB.ui
    。它应该是
    fb\u callout
    功能中的唯一内容

谢谢您的回答!我做了这些更改,但现在单击时没有显示任何窗口。。。你有没有想过为什么会出现这种情况?你有没有在浏览器控制台上查看错误或警告?控制台上写着:uncaughtreferenceerror:FB不是我想的那样定义的。您没有正确初始化js sdk。确保在window.fbasyninit函数中调用FB.init。