Получение Url страницы загруженной в iframe
Здравствуйте.
Вообщем в чем суть: Есть хостинг, допустим http://site.ru (PHP, SQL и.т.д. не доступны, по сути там только html ну и js) Есть домашний сервер с внешним ip, допустим 0.0.0.0 На хосте я подгружаю сайт расположенный на моем сервере через iframe Вроде бы все супер, да вот при серфе по сайту url в строке адреса http://site.ru/ что логично. Вот теперь я путем разных исхешрений пытаюсь решить данную проблему... Задача как я понимаю не тривиальная и информации по теме немного. Поэтому решил спросить помощи. Я представляю себе это так: 1. Страничкой на хосте, в которой загружен ifreme узнаем url который сейчас загружен внутри iframe. 2. меняем у пользователя в строке адрес. я пока не нашел информации по тому как получить реальный урл подгружаемого в iframe сайта. Пробовал самим сайтом получать свой урл, записывать в переменную, и отдавать страничке на хостинге.. но тут есть несколько проблем: Я не нашел как передать переменную из iframe(учитывая что они на разных серверах). Вторая проблема это то что придется каждой странице на моем сервере добавлять спец код (что не удобно) Вообщем прошу помощи, потому что задача действительно не тривиальная. Спасибо. |
Ошибка
|
Он и не будет меняться, так реализован iframe, что логично. Я ищу способы чтобы обойти это и выводить адрес.
|
самый главный вопрос: зачем?
|
чтобы пользователю отображался адрес страницы на которой он сейчас находится...
Если это можно реализовать как нибудь по другому буду рад выслушать) |
alert(window.location.href); |
Если вы напишите в адресную строку адрес страницы, которая загружена в ифрейм, эта страница загрузится в основное окно. Вроде очевидно.
Цитата:
|
На это есть несколько причин:
1. У моего сервера динамический внешний ip со всеми вытекающими последствиями. 2. Гораздо приятние, привычнее и удобнее залезать на сайт по адресу http://site.ru нежели http://0.0.0.0/ |
А можно по подробнее насчет всплывающего окна... немного читал о реализации моей задачи как раз этим путем... конкретно там ничего написано не было.
В частности интересует как это окно прятать от юзера... и как из него получить адрес? Спасибо. |
какого всплывающего окна?
а почему нельзя выложить сайт на хостинге и не иметь проблем? |
Цитата:
Цитата:
|
Хм... вот что интересно. Я попросил совета и четко описал задачу, а вы пытаетесь уйти от этого.
Я честно говоря человек не самый глупый... и все альтернативные варианты уже рассмотрел... Почему не сунуть на хост? Потому мой вариант абсолютно бесплатный, гибкий, быстрый и полностью меня устраивает. ddns вещь конечно хорошая, но вот бесплатные домены у них убогие... |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Вообщем.
Я наверно был не прав когда написал про то что не самый глупый... извиняюсь. Суть в чем, http://site.ru лежит на бесплатном хосте(нет почти ничего, html, js... вообщем нет языков обробатываемых сервером php в часности). http://0.0.0.0 - мой внешний ip, там полноценный веб сервер Я гружу сайт из моего сервера в айфрейм на хосте... но при серфе по сайту в браузере висит постоянный url http://site.ru/ Допустим юзер захотел скинуть ссылку на страницу другу... оп не вышло... (это я для примера) Вот поэтому и заморачиваюсь... А помимо бесплатности у меня уже спортивный интерес))) Вообщем если я еще не вызвал у вас жесткой антипатии... то тема все еще актуальна... |
site.ru это купленный домен или тоже бесплатный?
|
Пока занимался другим проектом в голову пришла идея...
Пусть страница что грузится в iframe узнает свой url (не особо разбераюсь в js, если выполнить window.location.hrefв нутри iframe какой адрес он возьмет тот что у таницы в iframe или что у верхней??) и записывает его в куки Потом, верхняя страница, внутри которой лежит iframe забирает это значение... и записывает в переменную... А вот сейчс самое интересное и на мой взгляд самое сложное: Как отправит заначение этой переменной в строку адреса браузера? Хотел бы узнать насколько реально все то что я описал? а также все еще жду ваших предложений... спасибо!) |
site.ru - полностью бесплатен (и домен и хост), поэтому я не могу просто прописать ему адрес сервера
|
Цитата:
Цитата:
Цитата:
|
точно(( - это я про куки
Цитата:
Нужно чтобы она как бы изменяла адрес но не перегружало страницу.. о как... чет я чувствую что я приду к тому что мне ответят что такое сделать нельзя(( |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Спасибо. |
Цитата:
Цитата:
location = 'https://mail.google.com/mail/?shva=1#inbox' хотя может есть какие-то подводные камни, никогда не пробовал таким заниматься. Можешь в fullajax покопаться... |
Цитата:
Цитата:
location.hash = '#newhash' |
Цитата:
|
Цитата:
|
ахаха))
Слушайте, а если сделать на странице которая грузится в iframe невидимы див, в который писать url страницы... А на странице внутри которой грузится фрейм получить этот див... так выйдет???? или джава получает элемент из скрипта, а не из сформированной страницы?? |
нельзя получить доступ к содержимому фрейма в другом домене. Да и что это даст?
|
Здравствуйте снова!)
Извините меня за откровенно говоря тупой вопрос... но почему-то никак не могу разобраться Вот от сюда беру код: http://javascript.ru/ajax/cross-orig...5:-postmessage Меняю его под свои домены, все работает! я тут уже с радости чуть ли не до потолка, но... Никак не могу сделать так, чтобы это все работало автоматически при загрузке страницы.... Собственно в примере когда тычешь на кнопку отправить во фрейм приходит переменная с сообщением... А мне нужно чтобы все это срабатывало во время загрузки страницы (а точнее даже до, но это то я найду как сделать) Тоесть нужно заменить сообщение обычной переменной, а отправку сделать без нажатия кнопки ОТПРАВИТЬ.... зы: и используется html5, ну там в примерах написано... Буду очень признателен! С уважением. |
Вообще проблема бредовая.)
Я так понял что нужна только возможность сохранения ссылки, в таком случае можно не парить мозг и сделать примерно так: На http://site.ru: <html> <head> <style type="text/css">html,body,iframe{width:100%;height:100%;border:0;padding:0;margin:0;} html,body{overflow:hidden}</style> </head> <body> <script type="text/javascript">document.write('<iframe src="http://0.0.0.0'+location.hash.slice(1)+'"></iframe>')</script> </body> </html> В head подгружаемого http://0.0.0.0: <script type="text/javascript">window.onload=function(){top.location.hash=location.href.replace('http://site.ru','')}</script> |
хм... к сожалению ничего не происходит((
|
Всё работает.
<html> <head> <style type="text/css">html,body,iframe{width:100%;height:100%;border:0;padding:0;margin:0;} html,body{overflow:hidden}</style> </head> <body> <script type="text/javascript">document.write('<iframe src="http://ajitae.no-ip.org/show'+location.hash.slice(1)+'"></iframe>')</script> </body> </html> По крайней мере в ff, мож и есть какие нюансы с браузерами, но лень смотреть. |
Спасибо, сейчас тогда еще раз попробую протестить...
А не мог бы помочь разобраться с этим: http://javascript.ru/forum/83429-post29.html |
Aetae,
Вообщем то да, работает только в ff(( |
<html> <script type="text/javascript"> function MyIframeIsLoaded() { alert('is loaded'); } function MyOnLoad() { var frameRequest = document.getElementById("myIFrame"); frameRequest.setAttribute("src", 'http://www.google.com'); } </script> <body id="myBody" onload="MyOnLoad();"> <iframe id="myIFrame" onload="MyIframeIsLoaded();"> </iframe> </body> </html> по поводу вашего вопроса, то как только загрузилась страница с другого домена, тут же закрывается весь доступ к этой странички через DOM (в целях безопасности), поэтому после загрузки странички страничка должна кинуть postMessage родительскому окну (в качестве параметра можете передать адрес странички), родительское окно должно подписаться на событие получения сообщений, получить это собщение и вывести его на странички. Как мне кажется лучшим вариантом будет менять хеш родительского окна (как и предложил Aetae, только менять хешь не непосредственно а через отправку сообщений) а при загрузке обрабатывать его и открывать соответственную страницу. пример http://site.ru#mypage1, http://site.ru#mypag2 и тд. |
dionis,
Вообщем то не совсем понял принцып работы, ну сейчас попробую разобраться... Не могли бы вы все таки помочь вот с этим постом: http://javascript.ru/forum/83429-post29.html |
вобщем с тебя быть добрым и отзывчевым :)
код на сайте http://run.local/index.htm <html> <script type="text/javascript"> PostAjax = {}; PostAjax.receiveMessage = function (event) { window.location.hash = event.data; }; PostAjax.AddEvent = function (obj, eventType, fn) { var that = this; var tempFunction = function (e) { fn.call(that, e); }; if (obj.addEventListener) { obj.addEventListener(eventType, tempFunction, false); return true; } else if (obj.attachEvent) { var r = obj.attachEvent("on" + eventType, tempFunction); return r; } else { return false; } }; PostAjax.AddEvent(window, 'message', PostAjax.receiveMessage); function MyOnLoad() { var frameRequest = document.getElementById("myIFrame"); frameRequest.setAttribute("src","http://your.local" + window.location.hash.slice(1)); } </script> <body id="myBody" onload="MyOnLoad();"> <iframe id="myIFrame"> </iframe> </body> </html> код на сайте http://your.local/page1.htm <script type='text/javascript'> var url = window.location.pathname; var parentUrl = "http://run.local"; window.parent.postMessage(url, parentUrl); </script> запускаем: http://run.local/index.htm#/page1.htm |
Цитата:
|
dionis,
Огромное спасибо за ваш код! Он полностью работает в самых известных браузерах. Но он предназначен лишь для одной из функций. То есть теперь пользователь зная ссылку может зайти на определенную страницу моего удаленного сайта(и за это огромное спасибо!) Теперь осталось реализовать вторую функцию, чтобы когда юзер серфил посайту, ему бы в строке браузера показывалась ссылка страницы на которой он находиться... Я думал попробовать соединить ваш скрипт, со кодом Aetae, но проблема в том, что его метод работает лишь для браузера фаерфох... Если нет способов изменить его скрипт так, чтобы он стал работать во всех браузерах, то единственный, по моему мнению, способ получить ссылки страницы груженной во фрем остается: http://javascript.ru/forum/83429-post29.html http://javascript.ru/ajax/cross-orig...5:-postmessage Но так как мой js сейчас прямо скажем убог, возможно есть и другие способы!) Спасибо всем кто помогает мне!) |
ну блин всё обьяснять приходится:)
код Aetae не подойдёт так как взаимодействовать между доменнами как в ту так и в другую сторону можно только через postMessage. а этот код конечно же нужно дабавить на ВСЕ страницы вашего сайта, ну либо в шаблон на сайте или как оно там называется в php. этот код как раз и меняет хеш родительского сайта. <script type='text/javascript'> var url = window.location.pathname; var parentUrl = "http://run.local"; window.parent.postMessage(url, parentUrl); </script> тоесть он должен быть на всех страницах http://your.local/page1.htm http://your.local/page2.htm http://your.local/page3.htm http://your.local/page4.htm и тд. |
Часовой пояс GMT +3, время: 02:34. |