Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№110-05-2012 12:22:33

AvatrBlueray
Участник
 
Группа: Members
Зарегистрирован: 09-05-2012
Сообщений: 2
UA: Firefox 12.0

Доступ к глобальным переменным окна из расширения

Добрый день.

на страницах вконтакта при запущенном аудио плеере в глобальных переменных появляется объект audiopleer.

У этого объекта есть методы: pause, play, prev, next, add.

как можно получить доступ к этому объекту.

я  прочитал статьи про https://developer.mozilla.org/en/Code_snippets/Tabbed_browser и все статьи рядом

пробовал получить доступ к объекту через contentWindow и contentDocument. каждый раз объект audiopleer был undefined

сейчас в расширении https://addons.mozilla.org/ru/firefox/addon/vk-player-control-panel/ используется следующий метод

  1) запоминаем текущую вкладку
  2) находим вкладку вконтакта
  3) делаем ее активной
  4) находим элементы управления
  5) посылаем им клик
  6) делаем предыдущую вкладку активной

это работает, мигания вкладок нет, но я считаю этот метод неправильным

у меня  есть еще один вариант получения доступа к объектам

  0) находим нужную вкладку и делаем ее активной
  1) создаем на странице элемент
  2) добавляем в него обработчик onclick, который получит доступ к глобальным объектам, все полученные данные сложит в дочерние объекты
  3) посылаем элементу событие mouseclick
  4) из дочерних элементов получаем данные
  5) удаляем элемент

есть менее извратный вариант получения доступа к глобальным объектам других вкладок?

Отсутствует

 

№210-05-2012 18:05:24

AvatrBlueray
Участник
 
Группа: Members
Зарегистрирован: 09-05-2012
Сообщений: 2
UA: Firefox 12.0

Re: Доступ к глобальным переменным окна из расширения

у меня получился вот такой рабочий метод получения данных из объекта _gat.

есть ли варианты проще?

Выделить код

Код:

test4: function(){

    
    script = window.content.document.getElementById('_script');
    // если контейнер со скриптом пуст сохдаем контейнер и скрипт
    if ( script == null){
        script = window.content.document.createElement('div');
        script.setAttribute('id','_script');
        script.setAttribute('onclick','_xz_func();');
        body.appendChild(script);
    
    
         script_text = window.content.document.createElement('script');
        
        var newtext = document.createTextNode(" function _xz_func(){                            "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   _xz = document.getElementById('_xz');            "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   if (_xz == null ){                             "); script_text.appendChild(newtext);
            newtext = document.createTextNode("       _xz = document.createElement('div');        "); script_text.appendChild(newtext);
            newtext = document.createTextNode("       _xz.setAttribute('id', '_xz');                "); script_text.appendChild(newtext);
            newtext = document.createTextNode("       document.body.appendChild(_xz);                "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   }                                                "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   while (_xz.firstChild) {                        "); script_text.appendChild(newtext);
            newtext = document.createTextNode("           _xz.removeChild(_xz.firstChild);        "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   }                                                "); script_text.appendChild(newtext);
            newtext = document.createTextNode("                                                   "); script_text.appendChild(newtext);
                                                // получаем данные объекта _gat,  объект создаваемый скриптом гугл аналитики
                                                // и складываем их в <div id = "_xz">
            newtext = document.createTextNode("   for ( x in _gat){                                "); script_text.appendChild(newtext);
            newtext = document.createTextNode("           _temp = document.createElement('div');    "); script_text.appendChild(newtext);
            newtext = document.createTextNode("           _temp.setAttribute('_test',x);            "); script_text.appendChild(newtext);
            newtext = document.createTextNode("           _xz.appendChild(_temp);                    "); script_text.appendChild(newtext);
            newtext = document.createTextNode("                                                   "); script_text.appendChild(newtext);
            newtext = document.createTextNode("   }                                             "); script_text.appendChild(newtext);
            newtext = document.createTextNode(" }                                                "); script_text.appendChild(newtext);
            
        script.appendChild(script_text);    
    }
    
    
    
    var evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0, false, false, false, false, 0, null);
    // за пускаем сборщик        
    script.dispatchEvent(evt);
    
    
    // получаем данные из элемента на странице
    xz = window.content.document.getElementById('_xz');
    cells = xz.getElementsByTagName('div');
    var s='';

    for (var i = 0; i < cells.length; i++) {   
        var status = cells[i].getAttribute("_test");   
        s = s + status +'; ';
    }
    
    
    var ts = Math.round((new Date()).getTime() / 1000);
    window.content.document.title = ts+' '+s;
     
    

  },

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]