2015-10-03 4 views
6

Я написал html-код, который инициализирует мой iframe другим сайтом.Как определить текущий iframe-url?

мой домен, например:

www.mydomain.com/Index.html

в этом есть более

<iframe src = "www.anotherdomain.com/pages/firstPage.html"/> 

Я хочу, чтобы обнаружить совершенно новый Src URL всякий раз, когда IFrame получает новый. Текст iframe состоит из ссылок на другие страницы на начальной странице. Возможно ли и законно это сделать? Благодарю. Любая помощь приветствуется.

Я предполагаю, что это касается проблем с перекрестным происхождением, но есть ли работа для этого?

Update

Я пытался получить ответ на

document.getElementById("myIframeId").src 

в случае нагрузки кадра. Но он продолжает показывать src, с которым он инициализируется. Он не показывает обновленный src.

document.getElementById("myIframeId").contentWindow.location.href 

Предоставляет ошибку безопасности, что http-фрейм пытается получить доступ к https в iframe. Протоколы несовместимы.

Я сделал localhost для SSL и использовал https, но запрос был заблокирован. Я не знаю почему.

ответ

1

Я не согласен с ответами, которые предполагают, что вы должны использовать «src» для обнаружения текущего URL-адреса iframe. Это просто не дает вам текущий URL-адрес, но URL-адрес, с которого он начинался.

Домен должен быть из того же происхождения, чтобы использовать метод следующего кода:

$(document).ready(function() { 
    $('#myframe').load(function() { 
    alert($(this).get(0).contentWindow.location.href); 
    }); 
}); 

Если домены различного происхождения - но у вас есть доступ к обоим (или оба твои), то вы можете использовать функцию window.postMessage и contentWindow свойство iFrame, чтобы отправить данные для родителя, чтобы показать, когда загружается новая страница.

Вот учебник на том, что: http://javascript.info/tutorial/cross-window-messaging-with-postmessage

И если домен в плавающем фрейме совершенно чужд, один подход, который я могу думать о том, чтобы загрузить этот домен в стороне сервера сценарий и получить его, чтобы сделать эти данные с измененными ссылками. Теперь вы можете вызвать этот скрипт внутри iFrame и использовать свойство contentWindow.location.href всякий раз, когда он загружается.

+0

Да, вы указали на проблему, с которой я столкнулся. Вы можете проверить обновленный вопрос. Спасибо –

+0

Я уже дал ответы на вопросы, которые вы выделили в своем обновлении –

0

Нет, это не приведет к ошибке перекрестного происхождения.

<iframe id="test" src="www.anotherdomain.com/pages/firstPage.html"></iframe> 

Javascript:

alert(document.getElementById('test').src); 

Это предупредит значение ГКЗ фрейма.

Также вы можете установить src ynamically.

document.getElementById('test').src = "http://www.neuralnetworksolutions.com/resources.php"; 

Вы можете узнать больше на яваскрипт IFRAME из http://www.dyn-web.com/tutorials/iframes/

+0

Проверьте обновленный вопрос. Спасибо –

2

Вы можете проверить src свойства на интервал, чтобы увидеть, если она изменилась. Вот функция, которая сделает это за вас.

function watchIframeSRC(iframe, callback, interval) { 
    // check every 1 second by default 
    if (typeof interval === 'undefined') { 
     interval = 1000; 
    } 
    var src = iframe.src; 
    return setInterval(function() { 
     // invoke the callback if the src is different 
     if (iframe.src !== src) { 
      src = iframe.src; 
      callback(iframe); 
     } 
    }, interval); 
} 

var iframe = document.getElementById('test'); 

watchIframeSRC(iframe, function (iframe) { 
    console.log("iframe src:", iframe.src); 
}); 
+0

Мне это не нравится. Но, однако, он не работает с атрибутом src. Проверьте обновленный вопрос. Спасибо –

+0

То, о чем вы просите, невозможно. И по звукам этого вы пытаетесь сделать что-то злобное. –

0

Ok. Я работал, чтобы выяснить различные ответы, но я смог сделать это с помощью YQL и jQuery, чтобы сделать запрос ajax для перекрестных доменов. IFrame не позволит мне получить доступ к его внутренним событиям. Я очистил html из другого домена с помощью YQL и получил работу. Удалил мой iFrame и поместил скребковый html в div.

Смежные вопросы