19.12.2013, 15:25
|
Новичок на форуме
|
|
Регистрация: 19.12.2013
Сообщений: 4
|
|
Скрипт обновления 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. Во вторых, берут сомнения что будет обновляться в случае локального файла, без веб-сервера. Подскажите пожалуйста, как лучше организовать обновление?
|
|
19.12.2013, 18:49
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<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>
Последний раз редактировалось Deff, 20.12.2013 в 13:16.
|
|
19.12.2013, 18:50
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Deff
|
setTimeout('refreshIFrame()',2000)
|
Убил бы!
И наверное все таки setInterval
__________________
В личку только с интересными предложениями
|
|
20.12.2013, 11:58
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
danik.js,
1. Ваши предпочтения мало колышат, код валидный!
2. Отпиши тут http://javascript.ru/settimeout , что тьву не нравятся примеры
Последний раз редактировалось Deff, 20.12.2013 в 12:04.
|
|
20.12.2013, 12:43
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от 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);
|
__________________
В личку только с интересными предложениями
|
|
20.12.2013, 12:51
|
Новичок на форуме
|
|
Регистрация: 19.12.2013
Сообщений: 4
|
|
Сообщение от Deff
|
<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 и при подмене не хочет брать "занятый" файл, а дергает его из кэша?
|
|
20.12.2013, 12:54
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
danik.js,
Еще раз, - на странице http://javascript.ru/settimeout
Первый код примера - Изложите свои претензии там!
Сообщение от danik.js
|
. Любой достойный js-программист прекрасно понимает что это не "чьи-то" предпочтения.
|
1. Не стремлюсь к 'званиям'.
Задача писать автоматически и работоспособный код, по возможности короче
2. Пишу на автомате, даже не задумываясь: если код менее 100 знаков и нет передачи параметров в вызываемых ф-иях, - кавычки, - иначе анонимная функция... И не нужно строить из-себя гуру! Тут не письками меряются, а пытаются ответить на заданный вопрос, см выше по пути поправил исходный код ТС, отсутствовали кавычки и скобка.
Последний раз редактировалось Deff, 20.12.2013 в 12:56.
|
|
20.12.2013, 13:12
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от 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>
|
|
20.12.2013, 13:12
|
Новичок на форуме
|
|
Регистрация: 19.12.2013
Сообщений: 4
|
|
Хм, сделал так document.getElementByID('frame1').src=("source.htm l ?"+(+new Date())) в FireBug ошибок нет, но все равно не обновляет... Может iFrame cо скриптом в другой тег засунуть, head например?
|
|
20.12.2013, 13:16
|
Новичок на форуме
|
|
Регистрация: 19.12.2013
Сообщений: 4
|
|
Спасибо большое!!! Все заработало в последнем варианте! Выручили жутко!!!! Профи! А можно в двух словах на будущее, в чем различие основное? В порядке выполнения?
|
|
|
|