Twitter Intent Popups来自Actionscript 3应用程序

时间:2011-08-03 17:35:33

标签: javascript actionscript-3 android-intent twitter popup

我有一个显示用户推文的AS3应用程序。我正在尝试使用twitter intents链接来执行弹出窗口,例如https://twitter.com/intent/retweet?tweet_id=93035636432437248

当你有一个简单的href =“link”时,它将使用嵌入的http://platform.twitter.com/widgets.js来正确格式化一个漂亮的弹出窗口。

在flash中我只能以自己或空白打开,并且不会像点击html href链接时那样触发JavaScript。

我也尝试使用ExternalInterface调用js方法来使用document.location或window.open并且都没有使用twitter js。

从Flash按钮利用Twitter JavaScript的最佳方法是什么,以便我们获得漂亮干净的弹出窗口?

1 个答案:

答案 0 :(得分:2)

查看页面底部附近的Twitter Web Intents API Documentation,您可以找到指向未经模糊处理的源代码的链接,该代码显示其API如何自动处理链接。

简单地说,他们将点击事件处理程序附加到DOM,然后检查点击的链接是否指向他们的Web Intents URL。当您从ActionScript打开一个窗口时,您绕过了DOM,因此代码不会触发。

现在通常你会希望使用ExternalInterface来调用Web Intents API公开的方法;然而,Twitter上的聪明人已经在匿名封闭中创建了他们的整个API,以避免污染DOM - 得到爱javascript;)

所以,就个人而言,我会通过创建我自己的Twitter Web Intents API版本来解决这个问题,并将其包含在我的Flash应用程序所在的HTML页面上;例如:

// Create a global object which we can attach methods to.
var TwitterAPI = {};

// The methods themselves are created in a closure to avoid polluting the global
// namespace with temporary variables.
(function() {
    // The base URL of the Twitter API.
    TwitterAPI.baseURL = "https://twitter.com/intent/";

    // Opens a pop-up window and prompts the user to retweet the Tweet linked to 
    // the supplied tweet_id.
    TwitterAPI.retweet = function(tweet_id) {
        var url = TwitterAPI.baseURL + "retweet?tweet_id=" + tweet_id;
        openWindow(url);
    }

    function openWindow(url) {
        var windowOptions = "scrollbars=yes,resizable=yes,toolbar=no,location=yes";
        var width = 550;
        var height = 420;

        // Center the popup window.
        var left = Math.round((screen.width / 2) - (width / 2));
        var top = 0;        
        if (screen.height > height) {
                top = Math.round((screen.height / 2) - (height / 2));
            }

        window.open(url, 'intent', windowOptions + ",width=" + width +
            ",height=" + height + ",left=" + left + ",top=" + top);

    }
}());

然后,您可以通过ExternalInterface调用从ActionScript项目中调用此方法,如您之前所建议的那样:

ExternalInterface.call("TwitterAPI.retweet", "35782000644194304");