Расширение Chrome: загрузка скрытой страницы (без iframe)

Есть ли способ загрузить страницу, скрытую от пользователя?

Я не могу использовать iframe на фоновой странице, потому что на странице есть методы перебора кадров.

Я не могу использовать XHR, потому что на странице есть AJAX - мне нужен его (динамически генерируемый) DOM.

2 ответа

Решение

Боюсь, что у вас нет другого выбора, кроме вставки фрейма в любом случае. Чтобы разрушить iframe buster, вы можете использовать следующие методы:

  • Если iframe заблокирован X-Frames-Option: DENY просто удалите заголовок, используя webRequest API - см. Обход X-Frame-Options DENY в расширении Chrome?,
  • Если фреймбастер использует что-то вроде

    if (top !== self) {
        top.location.href = location.href;
    }
    

    Затем заблокируйте навигацию по сценарию, установив sandbox атрибут в фрейме:

    var frame = document.createElement('iframe');
    frame.sandbox = 'allow-scripts';
    frame.src = 'data:text/html,<script>' +
        'if (top !== self) { top.location.href = location.href;}' +
        'alert(" (runs the rest of the code) ");' + 
        '</script>';
    document.body.appendChild(frame);
    

    Навигация будет заблокирована без каких-либо ошибок. Следующее сообщение регистрируется в консоли, хотя:

    Небезопасная попытка JavaScript инициировать навигацию для фрейма с URL '(...URL верхней страницы...)' из фрейма с URL '(....URL фрейма..)'. Фрейм, пытающийся перемещаться по окну верхнего уровня, помещается в "песочницу", но флаг "allow-top-navigation" не установлен.

Эти методы всегда будут работать, если:

  • Страница содержит <meta http-equiv="X-Frame-Options" content="deny">,
  • Скрипт очистки кадра реализован как if (top === self) { /* run code*/ }

В этих случаях у вас нет другого выбора, кроме как открыть новую вкладку, прочитать ее содержимое, а затем закрыть ее. Увидеть chrome.tabs.create а также chrome.tabs.remove,

Вы можете использовать popUnder s для загрузки данных:

var win2;
function loadPopUnder(){
win2 = window.open("about:blank","",
    width=150,height=150,scrollbars=0,resizable=0,toolbar=0,location=0,menubar=0,status=0,directories=0");
    win2.blur();
    window.focus()
}

win2.document.location.href='http://www.exampe.com/url';

На самом деле они могут открываться в новой вкладке при определенных обстоятельствах - вы должны проверить фактическое поведение.

Также преимуществом является то, что это решение не зависит от браузера.

Другие вопросы по тегам