Refre sh html фреймы для междоменных сайтов вне моего контроля - PullRequest
4 голосов
/ 15 января 2020

Это может быть проблемой xy, так что для начала я расскажу немного об истории вопроса. Я пытаюсь создать простую панель инструментов, которая загружает несколько разных сайтов и циклы между ними. Чтобы сделать это, я настроил простой локальный сервер вместе со страницей html, которая заполняется различными сайтами в отдельных кадрах, а затем переключается между ними, скрывая / показывая каждый из них по очереди. Проще говоря, страница выглядит следующим образом:

<html>
<head></head>
<body>
<iframe id="frame1" src="www.example1.com"> </iframe>
<iframe id="frame2" src="www.example2.com"> </iframe>
<iframe id="frame3" src="www.example2.com"> </iframe>
</body>
</html>

Теперь я хотел бы перезагрузить каждый кадр, чтобы данные были актуальными. Для большинства сайтов я могу сделать это с помощью:

document.getElementById['iframe.src'] = document.getElementById['iframe.src']

Однако для сайтов, где изменения содержимого не отражаются в URL-адресе, это не будет работать и вместо этого будет «refre sh» на страницу назад. на главную страницу. То, что я хочу сделать, - это по существу отправить ссылку F5 * refre sh прямо на фрейм или использовать:

document.getElementById("iframe_id").contentWindow.location.href

или

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);

Но из-за CORS я могу не делай этого. Учитывая, что сайты являются внешними сайтами, которые я просматриваю и не могу контролировать, я изо всех сил пытаюсь найти способ обойти эту проблему. Есть ли что-то довольно очевидное, чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 31 января 2020

Вы ничего не упускаете, вот как работает веб. Вы не можете контролировать страницу из другого домена, кроме случаев, когда вы используете postMessage(), но это означает, что целевая страница подтверждает ваши сообщения и реагирует соответствующим образом.

Другими словами, вы выиграли ' Это невозможно, если вы не контролируете встраиваемые страницы.

0 голосов
/ 05 февраля 2020

Вы можете достичь чего-то похожего на время, удалив элемент iframe и создав его заново в том же месте,

будет похоже, что обновляется та же страница.

рабочий пример: это обновит sh кадр каждые 5 секунд.

<html>
<head></head>
<body>
    <div id="frameContainer1">
        <iframe id="frame1" width="500" height="500" src="http://www.example.com"> </iframe>
    </div>

<script type="text/javascript">
    window.onload = function() {
        setInterval(function(){
            let elem = document.getElementById('frameContainer1');
            var elemFrame = document.getElementById('frame1');
            elem.removeChild(elemFrame);
            var newFrame = document.createElement('iframe');
            newFrame.id = 'frame1';
            newFrame.setAttribute('src', 'http://www.example.com');
            newFrame.width = 500;
            newFrame.height = 500;
            elem.appendChild(newFrame);
        },5000)
    }
</script>
</body>
</html>
0 голосов
/ 03 февраля 2020

Вместо того, чтобы пытаться перезагрузить страницу в iframe, вам будет запрещено это делать. Вместо этого вы можете обновить URL-адрес в теге iframe, добавив некоторую случайную чушь в конец URL-адреса

Так, например, news.bbc.co.uk станет news.bbc.co.uk?qaz=1, а затем изменяйте его каждый раз, когда вы хотите, чтобы он обновлялся sh.

...