Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Авторесайз iFrame на разных доминах

Добрый день, уважаемые посетители cyberforum и залетные гости. Есть вопрос, а именно Авторесайз iFrame на разных доминах.

Опишу всю ситуацию:

У меня есть (залил ее для теста iFrame)/ Делал ее не руками, а в Adobe Muse, так как конструкция сайта должна быть просто (по идеи:)).

Для создания авторесайза iFrame на разных доминаха использовал эту . Но как то у меня вообще не работает данный способ.

Код iFrame на домине im-systems:

<iframe
src="http://rimskiy-forum-migracia.blogspot.ru?ret=http://im-systems.ru/test/migracionnui_ychet_rimskiy_forum.html" height="150" width=100%
style="padding:0; margin:0" scrolling="no"
onload="var th=this; setTimeout(function() {
var h=null;
if (!h) if (location.hash.match(/^#h(\d+)/)) h=RegExp.$1;
if (!h) for (var i=0; i<10000; i+=30) if (top.frames['h'+i]) { h=i; break; }
if (h) th.style.height=h+'px';
}, 10)"
></iframe>


Та страница, которая должна появляться в iFrame это блог на Blogger (googla) Знаю, что это криво, но так просят люди. Есть возможность править html в шаблоне .

Вот код для блога:

<script>
window.onload = function() {
var h = Math.ceil(document.body.scrollHeight / 30) * 30;
var ie = 0 /*@cc_on + @_jscript_version @*/;
if (!ie) window.name = &quot;h&quot; + h;
else top.location.replace(&quot;http://http://im-systems.ru/test/migracionnui_ychet_rimskiy_forum.html/#h&quot; + h);
}
</script>


Данным методом уже пользовался,когда делал похожий iFrame для блога на . Там полный открытый код и легко понять где за чем идет.

В Bloggere вообще не понятно, что где начинается, html дикий...Я думаю может я не туда ставлю JS на самом блоге, так как на домене im-systems фрейм работает, но не видит высоту блога((.

Исходный код блога:

Люди добрые помогите)!!!!
Ответ:
Добрый день, уважаемые посетители cyberforum и залетные гости.
Ну привет
Есть вопрос, а именно Авторесайз iFrame на разных доминах.
Вопрос: Как узнать ip сайта, на котором встроен iframe?

Есть mysite.com, с которого будут браться iframe. Например, mysite.com/calendar?iframe=1
И есть список ip адресов, на которые можно встраивать iframe.
ip1, ip2, ip3 и так далее.

То есть на сайте с ip1, ip2, ip3 можно просматривать mysite.com/calendar?iframe=1, а на сайте с ip6 вместо mysite.com/calendar?iframe=1 будет окно mysite.com с ошибкой доступа.

Как можно получить ip ресурса, на который встраивается iframe, чтобы проверить на сервере mysite.com является он разрешенным или нет?

Как-то можно изнутри iframe с помощью js взять внешнее окно, получить его адресную строку и передать её в php? Домены сайтов разные.

Какие есть варианты?
Ответ: skarietsky, изнутри iframe:
if (top != window) location.replace('?r=' + encodeURIComponent(document.referrer));
Вопрос: Вызов функции внутри iframe

Нужно вызвать функцию внутри iframe, вот только стандартный способ не работает
var iframe = document.getElementById('idiframe').contentWindow;
iframe.func();

в консоль падает:
Код:
Uncaught TypeError: iframe.func is not a function
НО когда я вызываю её через консоль(не через <top frame>, а через <iframe>), то всё работает.
Ответ: нет, сейчас поставил проверку типа:
iframe.onload = function(){
console.info('iframe загружен');}

но в консоль ничего не упало
Вопрос: Не загружается содержимое <iframe> в <div>

У меня на локальном сервере есть два файла index.html и lorem.txt. Хочу с помощью <iframe> загрузить содержимое файла lorem.txt в <div>. Но почему-то не получается. Что я делаю не правильно?

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Untitled</title>
</head>
<body>
	<div id="result"></div>
	<button id="request">Request</button>

	<script>
		window.onload = function() {
			var button = document.getElementById("request"),
				div = document.getElementById('result');

			button.addEventListener('click', function() {
				var result = createIframe("f", "/lorem.txt");
				div.innerHTML = result.contentWindow.document.body.innerHTML;
				//result.parentNode.removeChild(result);
			});

			function createIframe(name, src, debug) {
				var tmpElem = document.createElement('div');

				tmpElem.innerHTML = '<iframe name="' + name + '" id="' + name + '" src="' + src + '">';
				var iframe = tmpElem.firstChild;
				iframe.style.display = 'none';

				document.body.appendChild(iframe);

				return iframe;
			}
		}
	</script>
</body>
</html>
Ответ: laimas, точно, я что-то забыл про onload у iframe.
Вопрос: Динамическое изменение размера iframe

Есть iframe с сылкой на flash игру, для desctopov прописано стандартное разрешение и все норм, а вот для мобильных телефонов с разными разрешениями появляется проблема, как сделать так чтобы под все разрешения этот iframe с игрой нормально влазил под разные экраны?

media запросы не помогают

<iframe class="mobile hidden" src="http://www"></iframe>
<iframe class="desctop" src="http://www"></iframe>
<style>
.desctop {
	width: 100%; 
	height: 600px;
}
</style>


$(document).ready(function() {
		if ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
			$('.mobile').removeClass('hidden');
			$('.desctop').addClass('hidden');
		} else {
			$('.mobile').addClass('hidden');
			$('.desctop').removeClass('hidden');
		}
});
Ответ: Aetae,
И что таким способом iframe растянется по всему экрану?

нашел выход с помощью bootstrap классов
Вопрос: Получение значение DIV'а из iFrame'e

День, добрый.
Помогите решить задачу.


<body>

<iframe id="myframe" src="https://some_site/doc.html"></iframe>

<script>

var htmlDoc = document.getElementsByTagName('iframe')[0].contentWindow.document;
alert ( htmlDoc );    
</script>

</body>



Документ в iFrame

<body>
<div></div>
<div id="wrapper">0</div>
</body>


Я хочу получить значение div'а (с id="wrapper", в данном случае это 0) в переменную.

Обращение к htmlDoc.getElementById( 'wrapper' ) результата не дает.
Ответ: Не работает.

Я почти докопался до сути))

<iframe id="myframe" src="https://some_site.ru/1473473.html" onload="getFrameDiv()"></iframe>

<script>
function getFrameDiv () {
var htmlDoc = document.getElementById("myframe").contentDocument ;
var Div = htmlDoc.getElementById("wrapper");
alert ( Div );
}
</script>



И я, блин, получаю в переменную Div дивку с ID “wrapper”:




У этого дива значение innerHTML должно быть 12




Но его нет!

Вопрос: Подгрузка страници в iframe через AJAX

Добрый день!
Суть вопроса:
на странице есть выпадающий список и iframe, нужно реализовать смену контента в фрэйме выбирая нужную позицию в списке.
Примерно как на этом

Возможно есть готовое решение, или подскажете что почитать?
Ответ: нашел вот такую реализацию того что я хочу:
<head>
<script src="j/jquery-1.4.3.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
  <script type='text/javascript'>
    $(function(){
	  $('#querystring').change(function(){
           var url = './' + $(this).val()+'.htm';
           $('iframe').attr('src',url);
       //  alert("iframe src: " + $('iframe').attr('src'));  
      });
    });
</script>
</head>
<body>
  <select id='querystring'>
    <option value="map">A</option>
    <option value="map">B</option>
    <option value="map">C</option>
    <option value="map">D</option>
  </select>
  <iframe src=''></img></iframe>
</body>
</html>

но не знаю как сделать иконку лоадера при загрузке
<img id="loader" src="ajax-loading.gif" alt="Loading, Loading!">

подскажите пожалуйста)
Вопрос: Iframe onload

Долго не мог понять, почему в firefox нельзя для body поставить contenteditable и стили изменить так, чтобы у <html> и <body> высота была ненулевая. Оказывается, для движков blink не надо дожидаться готовности фрейма, а для firefox надо.
Так будет работать в хроме, но не в фф:
onload() # функция для после загрузки

А так будет работать в фф, но не в хроме:
@iframe.onload = onload

Решение, к которому все таки пришел, но интересно:
@iframe.onload = onload
onload()

Так работает и там и там, но может есть более элегантное решение, чтобы одна и та же функция не вызывалась два раза?
Ответ: Здравствуйте! Помогитите!Не могу решить задачу-после события onload="doSomething()" для ифрейма-возвращаться назад и добавлять еденичку в цикл .Подопытный:<iframe id="ifrm" src="demo.html" ONLOAD="doSomething()"></iframe>
-----------------------Делаю вот так-не работает! Но onload=alert('!!!') срабатывает!
news = здесь хранятся ссылки для ифреймов
var i = 0;
while (i < news.length) {
document.write(' <iframe onload=i++ src="'+news[i].href+' "></iframe>');
};
что здесь не так? Должно ведь работать..
Вопрос: Дождаться пока в iframe появится имя

Здравствуйте,
подскажите пожалуйста.

Загружаю на сервер файл с помощью iframe.
В итоге в iframe выводится новое имя загруженного файла.
Я его беру и вставляю куда надо в DOM страницы.

Но иногда имя не успевает появится в iframe т.к. файл долго грузится и вставляется ничего.
Как дождаться появления имени в нем?

Мой код:
function save_kvit()
{
	jQuery('iframe#receipt_upload').ready(function(){
		var receipt = jQuery('iframe#receipt_upload').contents().find('body').html();
		var id = jQuery('#modal_kv_form .member_id').val();
		var kvit_info = '<span class="del_user p_icon del_pk_kvit" title="Удалить квитанцию"></span><a href="/files/user/pk/receipt/'+receipt+'" target="_blank"><span class="kvit p_icon">Квитанция</span></a><br><input class="kvit_check" name="kvit_pk" type="checkbox" title="Подтвердить оплату">';
		jQuery('tr#'+id+' .pk_kvit').html(kvit_info);
	});
}


Кусок PHP обработчика формы:
if (move_uploaded_file($file["tmp_name"], $newpath)) 
	{ 
		echo $kvit_name = "{$namefile}.{$point_file}";
		...
	}
Ответ:
Сообщение от laimas
Обрабатывать событие onload фрейма.
спасибо за мысль.
вот так заработало:
jQuery('iframe#receipt_upload').load(function(){
...
Вопрос: Баг IE: YouTube iframe, обёрнытый в ссылку

Всем добрый день.

В общем такая проблемка в IE:
вставляю на страницу YouTube-видео стандартным способом (т.е. через iframe), iframe обёрнут в другую ссылку-обёртку (например на google.ru)

После вставки плейера он отлично работает в Opera, Firefox, Chrome, но глючит в IE - если запустить ролик, то параллельно с работой плейера открывается новая вкладка с google.ru (я специально добавил в ссылке-обёртке атрибут target="_blank", чтоб увидеть "параллельность").

Если теперь вернуться на вкладку с нашим роликом, и попробовать остановить ролик, или изменить качество, звук... короче, при любом щелчке на плейере - параллельно открывается вкладка с google.ru

Даже если прописать у ссылки-обёртки onclick="return false", не помогает...

Вопрос: как убрать этот глючный переход? (Варианты обернуть iframe с роликом в DIV или удалить аттрибут href у ссылки-обёртки - не предлагать пожалуйста, интересен именно конкретный случай)


Создал для удобства пример http://jsfiddle.net/P24km/3/
Попробуйте открыть в IE и запустить ролик...
Ответ:
Сообщение от SegaMega
Пример: на странице есть ссылки-обёртки на ролики YT, в которые динамически (JS) вставляются соответствующие iframe с плейером и роликом YT, заменяя всё внутри ссылок-обёрток.
Кстати, вот здесь я ошибся... Плагин не заменяет всё внутри обёртки, а просто добавляет iframe с видео...