Examples of capturing web intent events


Are there any examples of using a web intent event binding to capture the posted tweet’s id?
Right now I’m using a simple window.open(‘https://twitter.com/intent/tweet?text=can+you+help+answer+my+question%3F’) and not using a tweet button. How could I get the tweet event trigged so that it would get captured by a
twttr.events.bind(‘tweet’, function (e) {
console.log(‘twitter called back’, e);

Is there an api call that would open a new tweet window and once that window successfully posted, it would call my callback?


The tweet event gets fired to indicate that a Tweet has happened, but we don’t provide identifying information through the event payload: Intents function on your site without a user authorizing you access to their account, and providing a Tweet ID for an anonymous user’s action would implicitly provide you with their identity.

Web Intent events exist as a mechanism to trigger functionality in your page, not a data API.



Is there any way for web intents to work on Android devices with even the official twitter client, if the user chooses that instead of the current web browser? Currently, at least post Android 4.3, I think the event gets lost in the Android Intents app choosing process: even mobile web browsers don’t seem to close automatically (as they used to) they just offer a link back to the originating site, which of course can’t trigger an event. The official twitter client does seem to return the user to the originating website, but no event seems to be triggered from the tweet. This breaks any chained behavior or analytics based off the completion of a tweet event.


Unfortunately we don’t have a way to trigger events within the web context from native applications. Users who choose to override web content with native apps are taken out of the system.

We’re really keen to figure out a fix for this (@indianburger and I have conversations about it almost daily), and we’ll either pursue supporting the existing events if possible, or somehow update the events system to provide a new, useful response in the event that the native environment hijacks the interaction. Assuming we can do that without leaking sensitive information about the user. But, we don’t have it finalised yet.

There are frustrating limitations in how the different native platforms work, but of course there’s also a big advantage to the user if they can jump into a native app where they’re already logged in to Twitter. I think that in the interim it’s going to be a bit of a functionality compromise, but we’ll be working to improve this buggy middle ground at the very least.



thanks for the reply, Ben. Is there a way that I can call a window open through javascript and supply my Twitter App credentials to get authorization to see the user’s tweets ID.

I want to be able to promote the pieces of content that are shared/tweeted out the most on my site. I also prefer working in javascript.


Also, if I want to forget about capturing the id and all I want to do is do something when I know the tweet was successfully posted and show a “thank you” message, can I do something like this: http://jsfiddle.net/supune/4SEbE/

Currently, the bind event that I’m registering on line 27 is not being handled.

What am I doing wrong?

thanks again


The current event binding mechanism we have requires that the Intent itself open via our communication frame. The good news is that you can simplify what you’re doing very easily because widgets-js natively supports what you’re doing. I’ve forked your JSFiddle here: http://jsfiddle.net/RB2zP/1/

But in short, any link in your page to twitter.com/intent/tweet will get intercepted by the widgets-js event handler and be opened in a pop-up. So just include the script, bind the event, and use an <html><a></html> instead of your button. The event should work as you expect.



Unfortunately not at present, but I would love to make this work one day if we implemented some kind of domain-name security system for App IDs. Probably not something we’ll be able to get to soon, I’m afraid.



thanks for the fork of the code. I was hoping to keep the ui as a button because our product guys are very wary of putting <a> links to non-vertically related pages because of seo concerns.

Also, I was hoping to keep a handle to the child window so I could check to see if it was closed before the ‘tweet’ handler ran and track how many people click to share but don’t end up actually posting. My plan was to keep polling to see if the child window closed through the reference from child=window.open(…) and set an interval to check (child == null || child.closed) and if that was true before the tweet event handler fired, I could log an ‘aborted tweet’ event in GA.

Also, is there any way twitter might support buttons for tweets like share your post on twitter to deal with the SEO concern?

thanks again for the code on jsfiddle.


It’s unlikely we’d do a version as one of the functions of the embed code is to provide a functional fallback in situations where JavaScript has failed or been blocked for some reason.

For SEO concerns, you could add the rel=“nofollow” attribute to the Intent link, though.



And as for holding the child process/getting events for uncompleted tasks: We’ve got notes on adding more interactivity events to handle cases like that. Nothing to announce or document yet, but definitely something we’re thinking about.



I’ll stay tuned. What about something similar to facbook’s js sdk?


thanks again for reply.

I’m not 100% sure but I think there is still some concern about having an <a href=..> even if it’ is nofollow’d. but that’s off topic

Also from our perspective, I think we would rather have the button fail and do nothing if javascript is turned off/blocked than lose our main browser window to the immersive world of twitter, hoping that they come back after seeing their tweet… just some more feedback for what we are weighing when trying to decide on the way we want to allow folks to share on twitter. But again not that of a big deal since we don’t see that many folks with js turned off.

thanks again. cheers


Are you saying that all web intent events are lost if the user is using the native twitter client? Our code works well in browsers, but we experience the behavior described by Drew Tipson when we click on the web intent inside the twitter client on iOS, i.e. the window does not close automatically, and the link back to our site does not trigger the event we are waiting for (a retweet, in our case).


It would be wonderful if you guys could update the documentation - it pretty clearly states that the event payload will provide that information,

The response isn’t giving me any meaningful values for target either. It’s always: {“contentDocument”:null,“allowtransparency”:“true”}

Is there some other way that I can distinguish which of the different tweet buttons triggered the event?