Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2013, 15:25
Новичок на форуме
Отправить личное сообщение для Skyhawk Посмотреть профиль Найти все сообщения от Skyhawk
 
Регистрация: 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. Во вторых, берут сомнения что будет обновляться в случае локального файла, без веб-сервера. Подскажите пожалуйста, как лучше организовать обновление?
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2013, 18:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2013, 18:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

И наверное все таки setInterval
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 20.12.2013, 11:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 20.12.2013 в 12:04.
Ответить с цитированием
  #5 (permalink)  
Старый 20.12.2013, 12:43
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 20.12.2013, 12:51
Новичок на форуме
Отправить личное сообщение для Skyhawk Посмотреть профиль Найти все сообщения от Skyhawk
 
Регистрация: 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 и при подмене не хочет брать "занятый" файл, а дергает его из кэша?
Ответить с цитированием
  #7 (permalink)  
Старый 20.12.2013, 12:54
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

danik.js,
Еще раз, - на странице http://javascript.ru/settimeout
Первый код примера - Изложите свои претензии там!
Сообщение от danik.js
. Любой достойный js-программист прекрасно понимает что это не "чьи-то" предпочтения.
1. Не стремлюсь к 'званиям'.
Задача писать автоматически и работоспособный код, по возможности короче
2. Пишу на автомате, даже не задумываясь: если код менее 100 знаков и нет передачи параметров в вызываемых ф-иях, - кавычки, - иначе анонимная функция... И не нужно строить из-себя гуру! Тут не письками меряются, а пытаются ответить на заданный вопрос, см выше по пути поправил исходный код ТС, отсутствовали кавычки и скобка.

Последний раз редактировалось Deff, 20.12.2013 в 12:56.
Ответить с цитированием
  #8 (permalink)  
Старый 20.12.2013, 13:12
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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>
Ответить с цитированием
  #9 (permalink)  
Старый 20.12.2013, 13:12
Новичок на форуме
Отправить личное сообщение для Skyhawk Посмотреть профиль Найти все сообщения от Skyhawk
 
Регистрация: 19.12.2013
Сообщений: 4

Хм, сделал так document.getElementByID('frame1').src=("source.htm l ?"+(+new Date())) в FireBug ошибок нет, но все равно не обновляет... Может iFrame cо скриптом в другой тег засунуть, head например?
Ответить с цитированием
  #10 (permalink)  
Старый 20.12.2013, 13:16
Новичок на форуме
Отправить личное сообщение для Skyhawk Посмотреть профиль Найти все сообщения от Skyhawk
 
Регистрация: 19.12.2013
Сообщений: 4

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка iframe. Скрипт с внешнего сайта. HaseProgram Общие вопросы Javascript 10 10.07.2013 16:43
Не работает скрипт создаюший iframe Tvis Общие вопросы Javascript 1 17.04.2012 23:57
загрузка файла через скрытый iframe и потеря связи с сервером vahrusha AJAX и COMET 5 01.06.2011 14:43
скрипт в Iframe kal1sha Events/DOM/Window 2 30.08.2010 22:22
iframe и собственно скрипт PurtCer Общие вопросы Javascript 7 03.06.2010 13:14