мониторинг history.pushstate из расширения Chrome - PullRequest
16 голосов
/ 10 января 2011

Я разрабатываю расширение Chrome для настройки Facebook.Однако для отслеживания действий просмотра на сайтах с поддержкой HTML5, таких как Facebook, требуется переопределение window.history.pushState, как объяснено в этом вопросе SO .

К сожалению, кажется, что изолированные миры Chrome предотвращают такую ​​сортировкупереопределения.Есть ли другой способ отлова изменений в истории (кроме опроса document.location.href)?

Ответы [ 3 ]

7 голосов
/ 11 июля 2013

Не уверен, пытаетесь ли вы сделать это в background.js или content.js, но если это первое, вы можете сделать это, используя события webNavigation:

Вам необходимо установить разрешения для webNavigation в manifest.json :

  "permissions": [
     "webNavigation"
  ],

Затем в background.js :

  chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
        console.log('Page uses History API and we heard a pushSate/replaceState.');
        // do your thing
  });

Источник: Документация по расширению Chrome для веб-навигации

5 голосов
/ 10 января 2011

Да,

Один из способов - создать тег сценария и поместить туда код:

html = "window.history.pushState = function(a,b,c) { alert('Change !'); };";

var headID = document.getElementsByTagName("head")[0];         
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.innerHTML = html;
headID.appendChild(newScript);
3 голосов
/ 11 марта 2012

Опираясь на ответ @ Boris: для продолжения действия по умолчанию сохраните ссылку на исходную функцию pushState и затем вызовите ее:

var headID = document.getElementsByTagName("head")[0];         
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = chrome.extension.getURL('script.js');
headID.appendChild(newScript);

script.js:

window.history.pushState = (function(nativePushState) {
    return function(a,b,c) {
        // Do something
        nativePushState.apply(this, arguments); //Continue by calling native history.pushState
    };
})(window.history.pushState)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...