2014-01-20 2 views
4

Я использую следующий код в моей eventPage.js (замена backgroundPage Google), и я столкнулся с какой-то странной несогласованностью. Это сценарий:Непоследовательность с слушателями - onUpdated на одной машине и onReplaced на другой машине

Первая машина:

Открытие новой вкладки ->

onActivated 
onUpdated 
onUpdated 
onUpdated 

Ввод URL ->

onUpdated 
onUpdated 

ввести другой URL ->

onUpdated 
onUpdated 

Вторая машина:

Открытие новой вкладки ->

onActivated 

Ввод URL

onReplaced 
onActivated 

ввести другой URL

onReplaced 
onActivated 

Это мой код:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) 
{ 
    console.log("onUpdated"); 
     }); 

chrome.tabs.onActivated.addListener(function(tabId, changeInfo, tab) 
{ 
    console.log("onActivated"); 
    }); 

chrome.tabs.onReplaced.addListener(function(tabId, changeInfo, tab) 
{ 
    console.log("onReplaced"); 
    }); 

После много отладки я обнаружил, что причина этого различия является вариантом «Предсказывать сетевые действия для ускорения загрузки страниц» в настройках Google Chrome.

В первой машине указанная выше опция не выбрана и работает должным образом.

Ожидаемое поведение для второй машины?

Из документации я могу как-то понять onReplaced статус:

сгорело, когда вкладка заменяется другой вкладки из-за предварительной визуализации или момент.

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

Не удалось найти документацию на эту страницу в Интернете. В stackoverflow я едва мог найти один вопрос, который упоминает onReplaced listener, но не имел никакой информации, которую я могу использовать.

Благодаря

ответ

4

Имея «Предсказывать сетевые действия ...» опция включена, вызывает Chrome, чтобы попытаться предсказать ваше следующее действие (то есть, какой ресурс или страница, которую вы, вероятно, просить следующий) и загрузить его в фон (прежде чем вы сделаете запрос).Как только вы действительно запросите этот ресурс или страницу, Chrome не придется сначала загружать его, а затем подавать его вам; скорее, он просто обслуживает предварительно загруженный экземпляр. Это повышает производительность (пока точность ваших последующих действий будет точной).

Чтобы обслужить предварительно загруженную страницу, Chrome заменяет текущую вкладку (то есть, когда запускается onReplaced) с вкладкой, на которой уже загружена страница в фоновом режиме (вкладка замены становится активной, поэтому событие onActivated). Поскольку содержимое загружено на вкладке замены заранее, нет события onUpdated.


От Хром whitepaper on prerender:

расширяет предварительную визуализацию концепции упреждающего. Вместо того, чтобы просто загружать ресурс верхнего уровня, он выполняет всю работу, необходимую для показа страницы пользователю - без фактического отображения ее до тех пор, пока пользователь не нажмет. Prerendering ведет себя аналогично тому, как пользователь дважды щелкнул ссылку на странице (открыв ее на вкладке фона), а затем перешел на эту вкладку. Однако в предварительном режиме эта «фоновая вкладка» полностью скрыта от пользователя, а когда пользователь нажимает, ее содержимое легко заменяется на ту же вкладку, которую пользователь просматривал. С точки зрения пользователя, страница просто загружается намного быстрее, чем раньше.

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

+1

Спасибо за ответ. Является ли вышеописанным документом где-либо или это просто ваше понимание сценария? – Segev

+0

Возможно, я должен был включить некоторые документы в первую очередь. Я обновил ответ. Это описывает, что происходит. Зная это, тогда интерпретация наблюдений (в терминах хром. * События API запускаются довольно прямолинейно.) – gkalpak

+0

Отличная информация. Еще раз спасибо. Любой шанс, который вы знаете, есть ли способ проверить, установлен ли этот параметр или нет в chrome api? – Segev

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