If your script runs after the SDK loads, the event subscription will fail. <!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script> // Define this BEFORE the SDK loads window.fbAsyncInit = function() FB.init( appId : 'your-app-id', // Optional for like button xfbml : true, version : 'v18.0' ); // jQuery-powered detection FB.Event.subscribe('edge.create', function(href, widget) $('#output').html('<strong>Liked!</strong> URL: ' + href); ); FB.Event.subscribe('edge.remove', function(href, widget) $('#output').html('Unliked :('); ); ; </script> <!-- Load Facebook SDK --> <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v18.0"> </script> </head> <body> <div class="fb-like" data-href="https://www.facebook.com/facebook" data-layout="standard"></div> <div id="output" style="margin-top:20px; font-weight:bold;"></div> </body> </html> Why Can’t We Just Use $('.fb-like').on('click') ? A few developers try to target the parent container of the Like button. While you can detect a click anywhere inside that container, you cannot reliably tell if it was the Like button vs. the share button, counter, or empty space.

<div class="fb-like" data-href="https://your-website.com/article" data-width="" data-layout="button_count" data-action="like" data-size="small" data-share="false"></div> Now, add this JavaScript (with jQuery):

More importantly, Facebook loads the iframe asynchronously. The DOM elements you think exist might not be ready. In theory, you could watch for attribute changes in the iframe, but cross-origin restrictions block this. Stick with FB.Event.subscribe – it’s the official, reliable way. Common Pitfalls & Debugging | Issue | Solution | |-------|----------| | Event never fires | Make sure you’re logged into Facebook and the page URL matches the data-href exactly. | | fbAsyncInit not running | Check that you defined it before the SDK script tag. | | jQuery not detecting | Wrap FB.Event.subscribe inside $(document).ready() if using DOM elements. | Final Thoughts You can’t directly use jQuery to click-detect inside a Facebook iframe, but with the SDK’s edge.create event, you get an even better solution. This method works for Like buttons on any URL, and it also detects unlikes.