Получение URL-адреса текущей страницы из расширения с помощью crossrider

Я пытаюсь установить расширение для Firefox, Chrome, Safari и Internet Explorer, я использую crossrider.

В основном я хочу отобразить действие браузера, когда при нажатии отображается всплывающее окно, содержащее входной текст с текущим URL-адресом страницы и кнопку, которая откроет новую вкладку для другого URL-адреса, передавая URL-адрес в качестве параметра.

Вот что я сделал на основе того, что нашел в документации;

расширение.js:

appAPI.ready(function($) {
    appAPI.message.addListener(function(msg) {
        if (msg.request === 'getUrl'){
            appAPI.message.toPopup({url:location.href});
        }
    });
});

фон.js:

var activeTabUrl;

appAPI.ready(function($) {
    appAPI.browserAction.setResourceIcon('logo-19.jpg');
    appAPI.browserAction.setBadgeText('extn', [255,0,0,125]);
    appAPI.browserAction.setTitle('Add Url to Site');

    appAPI.browserAction.setPopup({resourcePath:'pin.html', height: 300, width: 300});

});

пин.html :

<!DOCTYPE html>
<html>
    <head>
        <title>
        </title>

        <script type="text/javascript">
        function crossriderMain($) {
            activeTabUrl = null;

            appAPI.message.addListener(function(msg) {
                if (msg.url) {
                    activeTabUrl = msg.url;

                    $('#url').val(activeTabUrl);

                    if(activeTabUrl){
                        $('#addurl').prop('disabled', false);
                    }
                }
            });

            appAPI.message.toActiveTab({request:'getUrl'});


            $('#addurl').click(function(){
                var fullUrl = 'http://my.site.com/addurl?url=' + activeTabUrl;
                appAPI.openURL(fullUrl, "tab"); 
            });

        }
        </script>
    </head>
    <body>
        <input id="url" name="url" readonly="true" type="text"/>
        <input id="addurl" type="submit" value="Add Url" disabled/ >

    </body>
</html>

Иногда поле, содержащее url, не заполняется, это происходит не на конкретной странице, для этой же страницы иногда будет отображаться, иногда нет. Я не могу определить конкретную причину.

Я делаю что-то неправильно ?


person vincenth    schedule 30.05.2016    source источник


Ответы (1)


Код выглядит нормально, за исключением незначительного момента объявления activeTabUrl в коде pin.html, а не в коде background.js, как есть. разные масштабы.

Исходя из опыта, единственное, что, как мне кажется, может быть причиной проблемы, это то, что иногда браузеры возвращают ответ на сообщение до того, как инициализируется прослушиватель сообщений. Чтобы избежать этого, добавьте в код pin.html задержку для отправки сообщения с запросом URL следующим образом:

setTimeout(funtion() {
  appAPI.message.toActiveTab({request:'getUrl'});
}, 0);

[Раскрытие информации] Я сотрудник Crossrider

person Shlomo    schedule 06.06.2016