0

Я пытаюсь держать мой хром расширение (написанное с реагировать) обновляется на веб-сайте, написанные с ember.jsОпределение загрузки страницы из современных рамок JS в расширении хромированной

Есть ли событие срабатывает, когда страница перезагружается? Мне еще не удалось найти его ... Я думаю о прослушивании события tabUpdate из chrome utils, чтобы проверить, изменился ли URL. Но что, если URL не меняется?

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

+1

Subscrib e к событиям, которые вы хотите использовать с объектом 'Ember', открытым в глобальном контексте страницы? Для этого вам понадобится [DOM-инъекционный скрипт] (https://stackoverflow.com/questions/9515704/building-a-chrome-extension-inject-code-in-a-page-using-a-content- скрипт) – wOxxOm

+0

Вы спрашиваете о том, что ваш текущий контекст сценария содержимого уничтожается и его необходимо перезагрузить (например, при использовании 'tabs.executeScript()'), или вы спрашиваете о просмотре изменений DOM, где ваш контекст контекста контента продолжает существовать ? Вы говорите о событиях, наблюдаемых на фоновом изображении, или о событиях, наблюдаемых с помощью уже введенного сценария контента? – Makyen

+0

Я говорю о обратном вызове на перезагрузке страницы. Возможно, решение заключается в использовании объекта Ember на веб-сайте, но он не будет работать для других фреймворков. Мой вопрос касался: как узнать, когда мое расширение должно перезагрузиться (изменение страницы или изменение URL и т. Д.) –

ответ

0

Лучший способ, который я нашел сейчас, - послушать изменения вкладок с помощью хром.

Я использую React with Redux.

-

listener.js (в фоновом скрипте)

export function listenTabReload() { 
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
     if (changeInfo.url) 
     chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { 
      chrome.tabs.sendMessage(tabs[0].id, { reload: true }); 
     }); 
    } 
); 
} 

App.jsx (в сценарии содержимого)

componentWillMount() { 
    chrome.runtime.onMessage.addListener(this.reloadApp); 
} 

reloadApp = (request) => { 
    if (request.reload) 
    this.setState({ version: new Date() }); // Stub state to re render components 
}; 
Смежные вопросы