тэг 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, очевидно, но как именно - слабо себе представляю. с одной стороны задача несложная, и изобретать велосипед не хочется; с другой - что-то толковых реализаций нагуглить не получилось) что скажете? спасибо заранее |
<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]
Цитата:
|
Все скрипты парсить не надо. Если не используется отложенная загрузка то последний на момент вызова скрипт в dom и есть наш скрипт.
|
мне кажется, это меньшая из проблем.
парсить как jsonp, у которого есть параметр callback. только параметр будет ещё один - container. |
Ну как вариант еще:
вызвать функцию из подгруженного cкрипта по onload <script type="text/javascript" src="/js/loader.js?container=#div" onload="getParametr(this)"></script> |
Цитата:
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';
Страницы в таком фрейме могут быть точно такие же какие могут быть в любом другом фрейме. |
Ну типично у фрейма еще и namе - особенно если с ним работать скриптами
И проще имхо не задавать атрибуты фрейма, а вклеивать тег <iframe> целиком в div, через innerHTML, ибо по большому счету у фрейма достаточно много праметров, а так как загрузка долгая, лишняя обертка в div незначительна А затем div => document.body.appendChild(div); |
Если параметр container разбирать на клиенте, то удобней выделить его в data-аттрибут. Ведь ачем создавать себе лишние сложности?
|
Aetae,
сервера не будет. а какие-то более-менее целостные и логически завершённые куски кода вообще будут? :) |
<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>
|
| Часовой пояс GMT +3, время: 11:08. |