Как взять title из iframe и передать его странице, в которой он загружается?

12
W
На сайте с 14.11.2012
Offline
41
2094

На страницы моего сайта выводится в теге iframe другая страница этого же сайта. Подскажите, пожалуйста, как взять title страницы, которая расположена в iframe и разместить его значение в title страницы, в которой расположен этот тег iframe (то есть в той, в которой он загружается)? Если я ничего не путаю, в js есть функция postMessage, которая без задержек передают значения между разными документами. Но как это сделать я не знаю. В принципе мне все равно, через что это реализовать (будь то js или php), лишь бы это точно и быстро работало.

eklips007
На сайте с 02.02.2010
Offline
64
#1

Из ифрейма данные вы не получите - политика безопасности браузеров не даст этого сделать. Лучшее решение - с помощью CURL вытянуть тайтл и потом уже грузить сам фрейм

LinkBoss.net - Трастовые ссылки для увеличения трафика в 10 раз! (http://linkboss.net/)
W
На сайте с 14.11.2012
Offline
41
#2
eklips007:
Из ифрейма данные вы не получите - политика безопасности браузеров не даст этого сделать. Лучшее решение - с помощью CURL вытянуть тайтл и потом уже грузить сам фрейм

А подскажите как это сделать?

Mik Foxi
На сайте с 02.03.2011
Offline
1217
#3

если взять нужно с этого же сайта своего, то взять можно.

Антибот, антиспам, веб фаервол, защита от накрутки поведенческих: https://antibot.cloud/ (8 лет на защите сайтов). Форум на замену серчу: https://foxi.biz/
W
На сайте с 14.11.2012
Offline
41
#4
foxi:
если взять нужно с этого же сайта своего, то взять можно.

Да обе страницы на одном и том же сайте. Вот только как его взять и потом еще и разместить содержимое в title страницы, в которой все загружается.

W
На сайте с 09.04.2013
Offline
46
#5

главная страница


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>main</title>
</head>
<body>

<iframe src="frame.html" frameborder="0"></iframe>
<script language="JavaScript">
(function() {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
document.title=e.data;
},false);
})();

</script>
</body>
</html>

iframe


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe title here</title>
</head>
<body>
iframe content
<script language="JavaScript">
(function() {
var url = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
parent.postMessage(document.title,url);
})();
</script>
</body>
</html>

Кстати, похожим методом пользуется гугл в своей рекапче.

W
На сайте с 14.11.2012
Offline
41
#6
webjey:
главная страница

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>main</title>
</head>
<body>

<iframe src="frame.html" frameborder="0"></iframe>
<script language="JavaScript">
(function() {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
document.title=e.data;
},false);
})();

</script>
</body>
</html>


iframe

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe title here</title>
</head>
<body>
iframe content
<script language="JavaScript">
(function() {
var url = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
parent.postMessage(document.title,url);
})();
</script>
</body>
</html>


Кстати, похожим методом пользуется гугл в своей рекапче.

Спасибо, но у меня почему-то появляется в тайтле этот код вместо текста:

W
На сайте с 09.04.2013
Offline
46
#7
widgin:
Спасибо, но у меня почему-то появляется в тайтле этот код вместо текста:

тут тоже не работает- http://n96847u2.bget.ru/frame/ ?

проверяете на домене? т.е урл должен быть moysait.ru/main.html

какой браузер?

что пишет в консоли?

W
На сайте с 14.11.2012
Offline
41
#8
webjey:
тут тоже не работает- http://n96847u2.bget.ru/frame/ ?
проверяете на домене? т.е урл должен быть moysait.ru/main.html
какой браузер?
что пишет в консоли?

В Firefox не работает, в том числе и по ссылке. В Chrome и Opera все нормально. В консоли Firefox следующие ошибки http://screencast.com/t/fEXHzdrE065

url указан не файлом, а ссылкой. Так как в ссылке этого фрейма передаются метки (с помощью php) и делается сплит-тест прелендингов.

<?
$flag = file_get_contents('tmp');

if($flag == 1){
$url = 'http://site.ru/1/?dp2=pr1&';
file_put_contents('tmp', 2);
}elseif($flag == 2){
$url = 'http://site.ru/2/?dp2=pr2&';
file_put_contents('tmp', 3);
}else{
$url = 'http://site.ru/3/?dp2=pr3&';
file_put_contents('tmp', 1);
}

?>

<iframe id="ifr" src="<?php print $url.$_SERVER['QUERY_STRING'];?>" FRAMEBORDER="0"></iframe>
W
На сайте с 09.04.2013
Offline
46
#9

Ошибки у вас из-за того, что при загрузке через file_get_contents подгружаются скрипты только

с абсолютными путями, относительные пути типа


<script language="javascript" src="script.js"></script>
нет.

Что касается моего скрипта, то похоже прилетает сообщение от другого обработчика , можно например так переписать

main.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>main</title>
</head>
<body>

<iframe src="frame.html" frameborder="0" id="main-content-iframe"></iframe>
<script language="JavaScript">
(function() {

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
var data=JSON.parse(e.data);
if (data.command=='getTItle'){
document.title=data.title;
}
},false);
})();

</script>


</body>
</html>

frame.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe title here</title>
</head>
<body>
iframe content
<script language="JavaScript">
(function() {
var json = {
command:'getTItle',
title: document.title
};
parent.postMessage(JSON.stringify(json),'*');
})();
</script>
</body>
</html>
W
На сайте с 14.11.2012
Offline
41
#10
webjey:
Ошибки у вас из-за того, что при загрузке через file_get_contents подгружаются скрипты только
с абсолютными путями, относительные пути типа

<script language="javascript" src="script.js"></script>
нет.
Что касается моего скрипта, то похоже прилетает сообщение от другого обработчика , можно например так переписать
main.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>main</title>
</head>
<body>

<iframe src="frame.html" frameborder="0" id="main-content-iframe"></iframe>
<script language="JavaScript">
(function() {

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
var data=JSON.parse(e.data);
if (data.command=='getTItle'){
document.title=data.title;
}
},false);
})();

</script>


</body>
</html>


frame.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe title here</title>
</head>
<body>
iframe content
<script language="JavaScript">
(function() {
var json = {
command:'getTItle',
title: document.title
};
parent.postMessage(JSON.stringify(json),'*');
})();
</script>
</body>
</html>

Огромное спасибо. Теперь все работает во всех браузерах и даже с абсолютными путями.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий