Есть ли у нас эквивалент API синхронизации ресурсов, который можно использовать из расширения браузера?
Я хочу прослушать все запросы, идущие со страницы (в том числе из фреймов, которые у него могут быть), и получить показатели, похожие на API синхронизации ресурсов для всех запросов. Я хочу быть в состоянии сделать это из фонового скрипта.
Я попытался ввести тег скрипта напрямую, который будет прослушивать события dom change, а затем использовать эти данные. но посмотрите на проблему 2 там 1. она не получает все события смены dom-фреймов. 2. Я не могу найти дополнительные звонки, сделанные из фреймов.
{
"manifest_version": 2,
"name": "somwnamw",
"version": "1.0",
"author": "Me",
"description": "Some desc",
"icons": {
"48": "icons/border-48.png"
},
"content_scripts": [
{
"matches": ["*://*.mydomain.com/*"],
"js": ["trackIt.js"],
"run_at": "document_start"
}
],
"background": {
"scripts": ["background.js"]
},
"permissions": [
"webRequest",
"<all_urls>"
],
"web_accessible_resources": ["pa.js"]
}
Мой скрипт содержания имеет что-то вроде этого
s.addEventListener('load', function(w) {
});
(document.body || document.documentElement).appendChild(s);
И сценарий, который я ввожу в дом выглядит так
var observeDOM = (function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
eventListenerSupported = window.addEventListener;
return function(obj, callback){
if( MutationObserver ){
// define a new observer
var obs = new MutationObserver(function(mutations, observer){
if( mutations[0].addedNodes.length || mutations[0].removedNodes.length )
callback();
});
// have the observer observe foo for changes in children
obs.observe( obj, { childList:true, subtree:true });
}
else if( eventListenerSupported ){
obj.addEventListener('DOMNodeInserted', callback, false);
obj.addEventListener('DOMNodeRemoved', callback, false);
obj.addEventListener('DOMAttrModified', callback, false);
obj.addEventListener('DOMElementNameChanged', callback, false);
obj.addEventListener('DOMNodeInsertedIntoDocument', callback, false);
obj.addEventListener('DOMNodeRemovedFromDocument', callback, false);
obj.addEventListener('DOMSubtreeModified', callback, false);
}
};
})();
// Observe a specific DOM element:
observeDOM( document.documentElement,function(data){
let performanceData = performance.getEntries();
console.log(performanceData);
aggregateDataForFPTI(performanceData.slice(perfDataLength, performanceData.length));
perfDataLength = performanceData.length;
});
Но мой вышеприведенный код не обнаруживает изменения dom, и я также не могу получать звонки из фреймов. Я вижу эти запросы в инструментах разработчика Chrome, хотя. здесь мои фреймы из того же домена.
Поэтому я хочу вместо этого переключиться на фоновый скрипт, а затем прослушать все звонки, происходящие со страницы, и узнать время ресурса.