Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2013, 18:53
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

тэг script, загружающий iframe
день добрый.

имеется некая html-страница, в содержимое которой добавляется код вида
<script src="/js/loader.js?container='#div'" type="text/javascript"></script>


каким образом осуществить загрузку фрейма этим скриптом?
какое содержимое должно быть у этого js-файла?
я вот набросал примерно такое, но не уверен насколько оно работоспособно:
var idFrame = 'frameDownload';
var frame = document.getElementById(idFrame);
if (!frame) {
frame = document.createElement('iframe');
frame.id = idFrame;
frame.style.display = 'none';
document.body.appendChild(frame);
}
frame.src = './1.html';

плюс тут же возникает как минимум пара вопросов:
могу ли я таким образом загружать страницы с других доменов?
как вытащить параметр из подключаемого скрипта (?container='#div'), чтобы можно было загружать фрейм в элемент по этому селектору?
jsonp, очевидно, но как именно - слабо себе представляю.

с одной стороны задача несложная, и изобретать велосипед не хочется; с другой - что-то толковых реализаций нагуглить не получилось)

что скажете?

спасибо заранее
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2013, 20:12
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script id="frameScript" src="/js/loader.js?container=#div" type="text/javascript"></script>

Параметр вытащить по ID скрипта, хотя можно парсить все скрипты с src и анализировать атрибут
собственно по ID
var param=document.getElementById('frameScript').src.split('?container=')[1]

Сообщение от keen
могу ли я таким образом загружать страницы с других доменов?
можете - но последующего доступа скриптом со страницы создания к документам с других доменов во фрейме, - не будет

Последний раз редактировалось Deff, 03.06.2013 в 20:56.
Ответить с цитированием
  #3 (permalink)  
Старый 03.06.2013, 21:19
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,479

Все скрипты парсить не надо. Если не используется отложенная загрузка то последний на момент вызова скрипт в dom и есть наш скрипт.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 03.06.2013, 21:22
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

мне кажется, это меньшая из проблем.
парсить как jsonp, у которого есть параметр callback. только параметр будет ещё один - container.
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2013, 21:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Ну как вариант еще:
вызвать функцию из подгруженного cкрипта по onload
<script type="text/javascript" src="/js/loader.js?container=#div" onload="getParametr(this)"></script>
Ответить с цитированием
  #6 (permalink)  
Старый 03.06.2013, 21:27
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,479

Сообщение от keen Посмотреть сообщение
мне кажется, это меньшая из проблем.
парсить как jsonp, у которого есть параметр callback. только параметр будет ещё один - container.
Это понятно, мы обсуждаем варианты без привлечения сервера.(мы же javascript-извращенцы)

Deff, некрасивые ты варианты предлагаешь, даром что рабочие.)

keen,

Если с сервером не вижу проблем:
<script src="/js/loader.php?container=div" type="text/javascript"></script>
<?php хэдер файла - javascript ?>
var idFrame = "<?php гет[container] ?>";
var frame = document.getElementById(idFrame);
if (!frame) {
frame = document.createElement('iframe');
frame.id = idFrame;
frame.style.display = 'none';
document.body.appendChild(frame);
}
frame.src = './1.html';


Страницы в таком фрейме могут быть точно такие же какие могут быть в любом другом фрейме.
__________________
29375, 35

Последний раз редактировалось Aetae, 04.06.2013 в 11:19.
Ответить с цитированием
  #7 (permalink)  
Старый 03.06.2013, 21:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Ну типично у фрейма еще и namе - особенно если с ним работать скриптами
И проще имхо не задавать атрибуты фрейма, а вклеивать тег <iframe> целиком в div, через innerHTML, ибо по большому счету у фрейма достаточно много праметров, а так как загрузка долгая, лишняя обертка в div незначительна

А затем div => document.body.appendChild(div);
Ответить с цитированием
  #8 (permalink)  
Старый 04.06.2013, 06:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если параметр container разбирать на клиенте, то удобней выделить его в data-аттрибут. Ведь ачем создавать себе лишние сложности?
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2013, 13:10
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

Aetae,
сервера не будет.

а какие-то более-менее целостные и логически завершённые куски кода вообще будут?
Ответить с цитированием
  #10 (permalink)  
Старый 04.06.2013, 17:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<div id="div" style="border:1px solid"></div>
<script data-target="#div">
(function(){
	var script = document.scripts[document.scripts.length - 1];
	var target = document.querySelector(script.getAttribute('data-target'));

	var frameId = 'frameDownload';
	var frame = document.getElementById(frameId);
	if (!frame) {
		frame = document.createElement('iframe');
		frame.id = frameId;
		//frame.style.display = 'none';
		target.appendChild(frame);
	}
	frame.src = '//javascript.ru';
})()
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение ссылки на iframe из содержимого в этом iframe mister_maxim Events/DOM/Window 5 15.02.2013 21:48
Изменить параметр тега iframe AlexM jQuery 2 26.01.2012 11:05
Вложенные IFrame и History goldserg Элементы интерфейса 1 28.03.2011 15:57
Закрыть iframe из iframe rawuk Элементы интерфейса 1 02.03.2011 11:05
Почему в FF не исполняется клонированный тэг script? NT Man Firefox/Mozilla 0 15.11.2009 16:00