Як динамічно змінювати вміст у фреймі за допомогою jquery?


89

Мені було цікаво, чи можна мати сайт з iframe та деяким кодом jquery, який змінює вміст iframe кожні 30 секунд. Вміст знаходиться на різних веб-сторінках.

Щось на зразок цього:

<html>
  <head>
    <script type="text/javascript" src="jquery.js"></script>
    <script>
      $(document).ready(function(){
        var array = new array();
        array[0] = 'http://webPage1.com';
        array[1] = 'http://webPage2.com';
        // And so on.
        // Do something here to change the iframe every 30 second
      });
    </script>
  </head>
  <body>
    <iframe id="frame"></iframe>
  </body>
</html>

Внизу публікації не відображається, але це був базовий html із вставкою.
Аудун,

@Audun: я вам це виправив; наступного разу виділіть все і скористайтеся кнопкою коду. Крім того, інтервал - це круто.
geowa4

такі речі, як http://webPage1.comпотрібно, в лапках! //зробить коментар!
geowa4

Відповіді:


135
<html>
  <head>
    <script type="text/javascript" src="jquery.js"></script>
    <script>
      $(document).ready(function(){
        var locations = ["http://webPage1.com", "http://webPage2.com"];
        var len = locations.length;
        var iframe = $('#frame');
        var i = 0;
        setInterval(function () {
            iframe.attr('src', locations[++i % len]);
        }, 30000);
      });
    </script>
  </head>
  <body>
    <iframe id="frame"></iframe>
  </body>
</html>

17
[++ i% len] як спосіб перебору масиву з переробкою є чудовим! Це навчило мене нової моделі! Дякую!
rhh

8
Зверніть увагу, що всередині функції setInterval вам не потрібно використовувати "$ (iframe)." але ви можете прямо "iframe". тому що ви вже створили iframe як об'єкт jQuery за кілька рядків вище. На ура
Маріо Авад,

Як бути, якщо інтервал, налаштований динамічно змінюється?
Йоханес А.І.

Замість цього використовуйте setTimeout
Анатолій

8

Якщо ви просто хочете змінити, куди вказує iframe, а не фактичний вміст усередині iframe, вам просто потрібно буде змінити srcатрибут.

 $("#myiframe").attr("src", "newwebpage.html");

2
load () не є функцією jQuery, що використовується таким чином. Вантаж для AJAX
Hurda

Завантаження не для Ajax, будь ласка, зверніться до @Hurda до документації ( api.jquery.com/load-event ) Ви побачите, що Load використовується для підключення навіть коли щось завантажується. Ви можете використовувати Load з зображенням. Але я повинен погодитися з вами, що це не підходить і у випадку, який Ентоні передбачає.
Patrick Desjardins

@Doak - Я все ще думаю, що він наводить api.jquery.com/load ajax load - він завантажує деякий вміст. Фактичний метод вибирається на основі параметрів - тому ми не можемо бути впевнені. Мені просто цікаво, чому ви відчуваєте потребу спробувати виправити мене через 11 місяців?
Hurda

Ну, я впевнений, між вами двома, ви обидва праві. Минуло стільки часу, як я торкнувся jquery, я не можу згадати, що робить навантаження. Я впевнений, що коли я писав відповідь 25 місяців тому, у мене було таке враженняload() його можна використати для перезавантаження будь-якого вікна чи об’єкта документа. Як я вже сказав, я вже не можу згадати, що це насправді робить. Я думаю, що загалом я намагався представити варіант, який був простим і не вимагав переговорів щодо політики того самого походження.
Ентоні

Насправді, я вважаю досить смішним Хурда припускати, який метод я мав на увазі, оскільки жоден з них насправді не досяг би того, що я передбачав. Чому б я думав, що метод, призначений для ajax, перезавантажує iframe не більше, ніж я вважаю, що метод, призначений для прив'язки подій, перезавантажить його? Якщо що, я, мабуть, думав про чистий js і про те, як ви використовуєте "onblah" для прив'язки та "bla" для запуску події. У будь-якому випадку, метод не перезавантажує iframe, тому я відредагував свою відповідь.
Ентоні

4
var handle = setInterval(changeIframe, 30000);
var sites = ["google.com", "yahoo.com"];
var index = 0;

function changeIframe() {
  $('#frame')[0].src = sites[index++];
  index = index >= sites.length ? 0 : index;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.