0

Мне нужно прослушивать изменения внутри тега iframe. Главная страница не изменяется, только содержимое iframe.Слушать изменения DOM внутри iframe

Страницы Iframe имеют форму, когда некоторые кнопки типа submit нажимают на форму, вызывают действие и изменяют страницу только внутри iframe.

Я исследую следующий, но работает только с главной страницей документа, только основной документ прослушивает изменения DOM, но не внутри iframe.

function listener() 
{ 
    console.debug("listener fired."); 
} 

document.addEventListener('DOMSubtreeModified', function() { 
    var iframes = document.getElementsByTagName("iframe"); 
    for (var i = 0, len = iframes.length, doc; i < len; ++i) { 
    // Catch and ignore errors caused by iframes from other domains 
    console.log(i); 
    try { 
     doc = iframes[i].contentDocument || iframes[i].contentWindow.document; 
     //console.log(doc); 
     doc.addEventListener("DOMSubtreeModified", listener, true); 
    } catch (ex) { console.log(ex); } 
} 
},false); 
+0

так что же происходит? У вас есть доступ в iframe? – charlietfl

+0

У меня нет доступа на страницах iframe, потому что они скомпилированы .aspx-страницами, поэтому мне нужно сделать это с помощью chrome-расширений. – pinguik

+1

Я думаю, что единственный выбор - вставить элемент сценария кодом, который обнаруживает изменения * в * iframe. См. [Создание расширения Chrome - ввод кода на странице с использованием сценария содержимого] (https://stackoverflow.com/q/9515704), а BTW не используют 'DOMSubtreeModified', он устарел в течение нескольких лет из-за медленности. Используйте [MutationObserver] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) или проверку по таймеру; – wOxxOm

ответ

0

Я нашел решение, с Google Extensions API, я использовал только связь между сценарием содержания и фона страницы, то все изменения, сделанные его в веб-страницы, фон страницы отправить сценарий содержимого Написать сообщение а затем снова перезагружает скрипт содержимого и позволяет оценить, что мне нужно на веб-странице. Фоновая страница - лучшее решение для меня, потому что она всегда активна.

фона страницы

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {   
    if (changeInfo.status == 'complete') { 
     chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ 
     chrome.tabs.sendMessage(tabs[0].id, {action: "doit"}, function(response) {}); 
     }); 
    } 
}); 

содержание сценария

chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) { 
    if (msg.action == 'doit') { 
     analize_with_content_script(); 
    } 
}); 

Примечание analize_with_content_script() это функция, которая является триггер после получения сообщения от фона страницы.

Запомнить background page необходимо объявить в файле манифеста.

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

  • Нет связанных вопросов^_^