2015-06-26 2 views
1

Я столкнулся с этой проблемой при работе над расширением. Я добавляю pageMod к странице на основе события готовности к табло, чтобы изменить содержимое страницы, но когда я перезагружаю страницу, рабочий, похоже, подключается еще раз, поэтому после 1 перезагрузки он загружает 2 рабочих для одного и того же URL-адреса (без фреймов), после 2 перезагрузок не загружают 3 рабочих и т.д. Вот исходный код, который я начал с (я разорвал его из больших блоков):pageMod есть рабочие несколько раз

mod = null; 

tabs.on('ready', function(tab) {  
    mod = this.pageMod.PageMod({ 
     include: ["*"], 
     contentScriptFile: ["resource://data/full_page.js"], 
     attachTo: ["top", "frame", "existing"], 
     onAttach: function(worker) { 
      Logger.log('---------> worker.url is ' + worker.url); 
     } 
    }); 
} 

я был в состоянии исправить это несколько разрушив мода на каждое готовое событие, прикрепляя этот код в самом начале готового обработчика событий.

mod = null; 

tabs.on('ready', function(tab) { 
    if (mod) { 
     mod.destroy(); 
    } 

    mod = this.pageMod.PageMod({ 
     include: ["*"], 
     contentScriptFile: ["resource://data/full_page.js"], 
     attachTo: ["top", "frame", "existing"], 
     onAttach: function(worker) { 
      Logger.log('---------> worker.url is ' + worker.url); 
     } 
    }); 
} 

Однако, я все еще вижу, что двое рабочих привязываться после первой перезагрузки, три после второй, и т.д., я сделал, что мой слушатель был инициализирован только один раз. Кто-нибудь сталкивался с этим раньше? Я не использую его правильно? Спасибо! Luka

ответ

1

Нет, вы не используете его правильно. Одновременно нужно настроить pagemod. Он автоматически присоединяется к готовому. Созданный вами стиль страницы будет прикрепляться к каждой новой странице (["*"]). И каждый раз, когда загружается новая страница, создается новый pagemod, который присоединяется к каждой новой вкладке ...

Если вы хотите вставить скрипт контента на каждую страницу, просто избавиться от готового слушателя.

mod = this.pageMod.PageMod({ 
     include: ["*"], 
     contentScriptFile: ["./full_page.js"], 
     attachTo: ["top", "frame", "existing"], 
     onAttach: function(worker) { 
      Logger.log('---------> worker.url is ' + worker.url); 
     } 
    }); 

Если вы хотите использовать на готовом слушателя для конкретной вкладки, attach a script to the tab:

tabs.on('ready', function(tab) {  
    var worker = tab.attach({ 
     contentScriptFile: ["./full_page.js"] 
    }); 
    Logger.log('---------> worker.url is ' + worker.url); 
} 
+0

Это имеет смысл. Спасибо! – Lukich

Смежные вопросы