Сегодня я возился с упакованными приложениями Chrome, чтобы посмотреть, какой объем веб-сайта можно манипулировать с помощью функции внедрения кода.
Я использую twitter.com/#!/login в качестве своей песочницы, потому что она содержит довольно разнообразный массив элементов.
По какой-то причине следующий код ничего не делает:
chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) {
chrome.tabs.executeScript(tab.id, {code: "jQuery('.main').remove();"}, function() {
console.log('code executed');
});
});
Не похоже, что я вообще не могу получить доступ к странице, потому что это работает:
chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) {
chrome.tabs.executeScript(tab.id, {code: "jQuery('#page-container').remove();"}, function() {
console.log('code executed');
});
});
Я правильно загрузил jQuery в манифест и дал разрешения для всех сайтов.
На самом деле кажется, что я могу получить доступ к любому элементу на странице вне области # page-container.
Используя консоль Chrome dev-tools, чтобы связываться со страницей, я легко могу использовать jQuery для доступа к каждому элементу (хотя я понимаю, что это та версия, которую изначально использует страница).
Я заметил кое-что странное в теге # page-container:
<div id="page-container" class>...</div>
Существует атрибут класса без знака равенства или значения ... это может блокировать меня?
Есть какие-нибудь мысли о том, почему я не могу попасть дальше на страницу с введенным кодом?
EDIT:
Хорошо, я нашел обходной путь. Сохранение значения # page-container и использование setInterval для проверки изменений решает динамическую проблему.
Просто чтобы прояснить, не существует обработчика событий, который может наблюдать за изменением значения div, не так ли? Я просто чувствую, что использование интервалов для проверки вещей в наши дни настолько старомодно, хотя иногда это необходимо ...
Вот код обходного пути:
chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) {
chrome.tabs.executeScript(tab.id, {code: "var initial = jQuery('#page-container').html();var interval = setInterval(function(){var final = jQuery('#page-container').html();if(initial !== final){clearInterval(interval);jQuery('.main').remove();}},10);"}, function() {
console.log('code executed');
});
});