带有 AJAX 加载页面的“发送”按钮不起作用

Posted

技术标签:

【中文标题】带有 AJAX 加载页面的“发送”按钮不起作用【英文标题】:"Send" button with AJAX loading page would not work 【发布时间】:2012-07-29 14:02:59 【问题描述】:

我对“发送”/“赞”按钮有一个典型的问题。 我的页面包含使用 ajax 请求动态更新的内容。 因此,更新后,我的“发送按钮”不起作用。 按钮代码:

<div class="fb-send" data-href="$server/book.html?currBookId=$book.id_book"
                             style="margin-top: 5px;"></div>

包含all.js文件的标准代码:

<script type="text/javascript">(function(d, s, id) 
if (d.getElementById(id)) return;
var js, fjs = d.getElementsByTagName(s)[0];
js = d.createElement(s);
js.id = id;
var lang = "$lang";
js.src = "//connect.facebook.net/en_US/all.js'#xfbml=1&appId=$fb_id";
fjs.parentNode.insertBefore(js, fjs);
(document, 'script', 'facebook-jssdk'));</script>

我试图在这里找到答案并找到了解决方案: *** solution post

我应该添加这个:

 try
            FB.XFBML.parse();
         catch(ex) 

在 AJAX 调用之后。 但!! 它不工作!按钮现在在 Chrome 浏览器中绘制,但在控制台中我遇到了很多错误,例如:

 Unsafe JavaScript attempt to access frame with URL http://localhost:8080/catalog.html
 from frame with URL http://www.facebook.com/plugins/send.php?api_key=API-
 KEY&channel=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion
 %3D9%23cb%3Df847c7b0c%26origin%3Dhttp%253A%252F%252Flocalhost%253A8080%252Ff8c34834
 c%26domain%3Dlocalhost%26relation%3Dparent.parent&colorscheme=light&
 extended_social_context=false&href=http%3A%2F%2FMySite.com
 %2Fbook.html%3FcurrBookId%3D2668&locale=ru_RU&sdk=joey. 
 Domains, protocols and ports must match.

而且按钮不起作用。在 FF 中按钮不可见(这意味着解决方案在 FF 中不起作用)

您有什么想法可以解决这个问题吗?

【问题讨论】:

我使用来自 facebook javascript SDK 的 FB.ui 而不是标准的“发送”按钮。但我仍然对解决上面描述的问题感兴趣。 【参考方案1】:

我也遇到了异步使用 Like 按钮的问题。

我使用不同的代码来包含 all.js 和使用 FB.init(由 js.src = "//connect.facebook.net/en_US/all.js'#xfbml=1&amp;appId=$fb_id" 完成)。

这是我使用的:

/* Ajax stuff in order to generate like button in xfbml or html5 */

if (typeof(FB) != 'undefined' && FB != null ) 
    /* If FB.init has already been called, just parse like button */
    FB.XFBML.parse(document.getElementById('<YOUR-ID>'));
    /* You can also use FB.XFBML.parse() in order to parse the whole DOM, but I advise to integrate the Like / Send button into a div and parse it after */
else                       
    window.fbAsyncInit = function () 
            FB.init( appId: <YOUR-APP-ID>, cookie: true, xfbml: true, oauth: true );
            /* FB stuff here, e.g. FB.event.suscribe */
    ;      
    // Just load the script, no FB.init
    (function(d)
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) return;                                js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
    (document));

它非常适合我。

关于错误(Unsafe Javascript ...),它应该出现在 Chrome 中,而不是 FireFox。它是特定于 Chrome 的,并且因为您正在集成来自另一个域(FaceBook)的 iFrame 而被触发。 AFAIK,没有办法解决这个错误。希望这会有所帮助。

【讨论】:

以上是关于带有 AJAX 加载页面的“发送”按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有视图参数的 Ajax Quicktab 不起作用

Javascript函数显示带有setTimeout的隐藏按钮在PDF中不起作用

在 adminlte-3 bootstrap-4 treeview 打开/隐藏页面加载后加载动态 AJAX 侧边栏菜单 jquery 不起作用

在ajax加载页面后执行javascript脚本 - 不起作用

使用 AJAX 提交时发送电子邮件不起作用

Angular 在 jQuery Ajax 加载页面中不起作用