тэг 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> |
да, мерси, почти то что нужно.
остальную часть задачи - обмен данными между основной страницей и фреймом решил с помощью postMessage. спасибо всем откликнувшимся :victory: |
Часовой пояс GMT +3, время: 16:39. |