Расширение Chrome - контентный скрипт вводится несколько раз за одну загрузку страницы - PullRequest
3 голосов
/ 20 октября 2011

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

Я внедряю скрипт содержимого со своей страницы "background.html", на вкладке изменилось:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

... и т.д.

Внутри скрипта содержимого у меня есть несколько команд console.log

Проблема в том, что когда я загружаю ОДНУ страницу, я вижу, что каждый из журналов отображается в консоли 2-4 раза.

Мне совершенно ясно, что это происходит из-за фреймов на странице, я думаю, по крайней мере ... У меня вопрос ПОЧЕМУ?

Я видел в документации, что по умолчанию для "all_frames" (массива разрешений сценария содержимого в манифесте) должно быть установлено значение "false", в результате чего сценарий содержимого вводится только в верхний фрейм страницы, но это просто не происходит!

Почему его вводят несколько раз? Мне нужно физически установить "all_frames" в false?

Во-вторых:

Есть ли способ определить, является ли страница, в которую расширение пытается внедрить скрипт содержимого, iframe или top из WITHIN на странице "background.html"?

Я пытался

if(window.top === window){ console.log('whatever'); }

И обнаружил, что это НЕ работает в 100% случаев. Даже когда у меня есть это условие для остальной части моего блока кода (вокруг chrome.tabs.executeScript ()), я все еще вижу, что скрипт содержимого вводится несколько раз ....

Любые идеи или предложения будут с благодарностью! :)

1 Ответ

3 голосов
/ 20 октября 2011

onUpdated срабатывает каждый раз, когда изменяется состояние вкладки. Это включает, когда загрузка и загрузка завершена , что объясняет множество операторов журнала. Вам нужно проверять, что изменилось (URL-адрес изменился, загружен и т. Д.) При каждом запуске события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...