Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрипт обновления Iframe локального файла (https://javascript.ru/forum/css-html/43758-skript-obnovleniya-iframe-lokalnogo-fajjla.html)

Skyhawk 19.12.2013 15:25

Скрипт обновления Iframe локального файла
 
Добрый день, перерыл весь интернет, нашел кучу советов, но ни один не помог. Ваяю гаджет для вин7 под свои нужды, столкнулся с такой проблемой - есть основная страница гаджета, в нем iframe, файл source.html является локальным, будет генерироваться другой программой, необходимо, чтобы периодически iframe обновлялся. Сам новичок в ХТМЛ и джаве, вот что удалось накропать:

<iframe src="source.html" name="MainFrame" height="100" width="100" frameborder="0" scrolling="no" Id="frame1">
</iframe>
</head>
<script type="text/javascript">
function refreshIFrame() {
document.getElementByID('frame1').src="source.html "
}
setTimeout(refreshIFrame(),2000
</script>

Во первых, почему-то не срабатывает обновление в браузере когда подменяешь source.html. Во вторых, берут сомнения что будет обновляться в случае локального файла, без веб-сервера. Подскажите пожалуйста, как лучше организовать обновление?

Deff 19.12.2013 18:49

<iframe src="source.html" name="MainFrame" height="100" width="100" frameborder="0" scrolling="no" Id="frame1"> </iframe>

 <script type="text/javascript">
 function refreshIFrame() {
 document.getElementByID('frame1').src="source.html?"+(+new Date());
 }
 setTimeout('refreshIFrame()',2000)
 </script>

danik.js 19.12.2013 18:50

Цитата:

Сообщение от Deff
setTimeout('refreshIFrame()',2000)

Убил бы!:-/

И наверное все таки setInterval

Deff 20.12.2013 11:58

danik.js,
1. Ваши предпочтения мало колышат, код валидный!
2. Отпиши тут http://javascript.ru/settimeout , что тьву не нравятся примеры

danik.js 20.12.2013 12:43

Цитата:

Сообщение от Deff
Ваши предпочтения мало колышат

Какбы это не мои предпочтения. Это, так сказать, «best practice». Любой достойный js-программист прекрасно понимает что это не "чьи-то" предпочтения. А начинающему поможет jshint/jslint:

http://jslinterrors.com/implied-eval...d-of-a-string/

http://stackoverflow.com/questions/6...out-if-yes-why

http://stackoverflow.com/questions/6...-to-settimeout

Цитата:

We all know that passing a string to setTimeout (or setInterval) is evil, because it is run in the global scope, has performance issues, is potentially insecure if you're injecting any parameters, etc. So doing this is definitely deprecated:

setTimeout('doSomething(someVar)', 10000);

Skyhawk 20.12.2013 12:51

Цитата:

Сообщение от Deff (Сообщение 287859)
<iframe src="source.html" name="MainFrame" height="100" width="100" frameborder="0" scrolling="no" Id="frame1"> </iframe>

 <script type="text/javascript">
 function refreshIFrame() {
 document.getElementByID('frame1').src="source.html ?"+(+new Date());
 }
 setTimeout('refreshIFrame()',2000)
 </script>

Спасибо большое, только вот не могли бы объяснить вот эту конструкцию "source.html ?"+(+new Date()) никак в толк взять не могу. Наверное, как-то связано с новым файлом? Так source.html будет просто перезаписываться другой программой, а его имя меняться не будет, если только атрибуты.
И еще, полностью закопипастил ваш код, не хочет он что-то работать, когда source.html подменяю. Поставил Firefox c Firebug: ловит ошибку:

TypeError: document.getElementByID is not a function
document.getElementByID('frame1').src="source.html ?"+(+new Date())

без вышеуказанной конструкции ошибок нет, но все равно не обновляет iFrame. Подскажите, в чем может быть проблема, может быть я что-то не так делаю, может быть браузер кэширует source.html и при подмене не хочет брать "занятый" файл, а дергает его из кэша?

Deff 20.12.2013 12:54

danik.js,
Еще раз, - на странице http://javascript.ru/settimeout
Первый код примера - Изложите свои претензии там!
Цитата:

Сообщение от danik.js
. Любой достойный js-программист прекрасно понимает что это не "чьи-то" предпочтения.

1. Не стремлюсь к 'званиям'.
Задача писать автоматически и работоспособный код, по возможности короче
2. Пишу на автомате, даже не задумываясь: если код менее 100 знаков и нет передачи параметров в вызываемых ф-иях, - кавычки, - иначе анонимная функция... И не нужно строить из-себя гуру! Тут не письками меряются, а пытаются ответить на заданный вопрос, см выше по пути поправил исходный код ТС, отсутствовали кавычки и скобка.

Deff 20.12.2013 13:12

Цитата:

Сообщение от Skyhawk
TypeError: document.getElementByID is not a function
document.getElementByID('frame1').src="source.html ?"+(+new Date())

Пробуйте так
<script type="text/javascript">
 function refreshIFrame(sel) {
   setTimeout(function(){sel.src="source.html?"+(+new Date());},2000);
}
 </script>
<iframe src="source.html" name="MainFrame" height="100" width="100" frameborder="0" scrolling="no" onload="refreshIFrame(this)"> </iframe>

Skyhawk 20.12.2013 13:12

Хм, сделал так document.getElementByID('frame1').src=("source.htm l ?"+(+new Date())) в FireBug ошибок нет, но все равно не обновляет... Может iFrame cо скриптом в другой тег засунуть, head например?

Skyhawk 20.12.2013 13:16

Спасибо большое!!! Все заработало в последнем варианте! Выручили жутко!!!! Профи! А можно в двух словах на будущее, в чем различие основное? В порядке выполнения?


Часовой пояс GMT +3, время: 14:33.