Пользовательская кнопка HTML для Cocos Creator - PullRequest
1 голос
/ 07 ноября 2019

Я создаю простую игру только для веб-браузеров, использующих Cocos Creator, и мне нужно внедрить кнопку «Поделиться в твитер». Но мне нужно сделать это в простом JavaScript. Пока у меня есть этот код.

cc.Class({
    extends: cc.Component,

    properties: {
        tweet: cc.Button
    },

    start() {
        const el = document.createElement('a');
        el.classList.add('twitter-share-button');
        el.href = 'https://twitter.com/intent/tweet?url=http://test.com;via=stack';
        el.id = 'twiiterBtn';

        // After appending to body, element exists.
        document.body.appendChild(el);

        window.twttr = (function(d, s, id) {
            var js,
                fjs = d.getElementsByTagName(s)[0],
                t = window.twttr || {};
            if (d.getElementById(id)) return t;
            js = d.createElement(s);
            js.id = id;
            js.src = 'https://platform.twitter.com/widgets.js';
            fjs.parentNode.insertBefore(js, fjs);
            t._e = [];
            t.ready = function(f) {
                t._e.push(f);
            };
            return t;
        })(document, 'script', 'twitter-wjs');

        window.twttr.ready(function(twttr) {
            twttr.events.bind('tweet', function(event) {
                console.log('tweet callback', event);
            });
        });

        this.tweet.node.on('click', this.dispatch);
    },

    dispatch() {
        // Everytime I click the button, this function gets called correctly
        // but the element doesn't exist anymore, Cocos creator removed it.
        console.log(document.getElementById('twiiterBtn'))
    }
});

На start() я создаю элемент и добавляю класс, необходимый для кнопки твитера, window.twttr работает нормально, функция ready выполняется, но создатель Cocosудаляя мой элемент и поскольку элемент больше не существует, функция обратного вызова не работает. Если кто-нибудь сталкивался с подобной ситуацией и знает, как я могу решить эту проблему.

Мне нужно реализовать твит btn и получить обратный вызов.

Спасибо

1 Ответ

1 голос
/ 07 ноября 2019

Похоже, вы не можете знать, действительно ли пользователь написал в Твиттере или нет. Вот еще информация об этом: https://stackoverflow.com/a/48803977/4066787

Но вот рабочий код с обратным вызовом, когда пользователь нажимает и открывает всплывающее окно

cc.Class({
    extends: cc.Component,

    properties: {
        tweet: cc.Button
    },

    start() {
        // TODO: text IS CUSTOM MESSAGE; via IS TWITTER USERNAME
        const url = encodeURI('https://twitter.com/intent/tweet?text=super custom message;via=TwitterAccount');
        const el = document.createElement('a');

        el.classList.add('twitter-share-button');
        el.href = url;
        el.target = '_blank';
        el.id = 'twitter-intent';

        this.tweet.node.on('click', function(){
            window.open(url, '_blank', 'location=yes,height=370,width=520,scrollbars=yes,status=yes');

            // TODO: send callback to server.
            console.log("call API")
        });
    }
});
...