Необходимо изменить @src родительского iframe изнутри дочернего iframe - PullRequest
4 голосов
/ 23 сентября 2011

У меня есть следующая разметка HTML (не спрашивайте ....)

- document  //main site
  - <iframe>  //my site
    - <iframe>  //site within my site
      - <frame>
        - <a onclick="JavaScript:parent.parent.location.href='http://bla.com;return false;'">

По сути, основной сайт вызывает мой сайт в iframe. У меня, в свою очередь, также есть iframe на моем сайте, где я звоню на третий сайт. На третьем сайте есть набор фреймов, в котором есть ссылка. При нажатии на эту ссылку, он должен изменить URL моего сайта. Мой сайт и мой дочерний сайт находятся в одном домене. Когда мой сайт работает как «автономный» (не в iframe), приведенный выше код прекрасно работает во всех браузерах.

Как только я открываю свой сайт в фрейме основного сайта, похоже, что приведенный выше код пытается изменить источник основного сайта. В FireFox я получаю консольное сообщение «Доступ к свойству запрещен». В IE открывается новое окно с моим сайтом больше не на основном сайте.

Какой правильный JavaScript-код для изменения атрибута @src на моем сайте, когда я в пределах iframe?

Ответы [ 4 ]

2 голосов
/ 27 сентября 2011

Можете ли вы попробовать что-то вроде этого

<document> //main site
  <iframe id="my_iframe"> //your site
     <iframe> //site within your site
       <frame>
         <a onclick="JavaScript:Top.document.getElementById('my_iframe').location.href='http://bla.com;return false;'">

Top ссылается на главное окно, а затем getElementById ('my_iframe') выдаст вам ваш элемент iframe.

2 голосов
/ 23 сентября 2011

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

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

Хотя это может показаться неприятным, но будьте рады этому правилу в следующий раз, когда вы используете домашний банкинг;)

0 голосов
/ 23 сентября 2011

Возможно, вы захотите, чтобы страницы общались с помощью AJAX.Попросите сайт, которому необходимо изменить прослушивание URL-адреса, путем длительного опроса на сервер node.js.

0 голосов
/ 23 сентября 2011

Я полагаю, что вы пытаетесь установить связь между различными страницами . Вы можете посмотреть этот API: Обмен сообщениями между документами HTML5

По сути, если вы хотите указать родительскому iframe перейти на определенный URL, вы можете сделать это:


На сайте на моем сайте html:

// onclick of your anchor, post message (an event) with an expected origin
window.postMessage("http://bla.com", "www.sitewithinmysite.com");

В мой сайт html:

// listen to the event "message"
window.addEventListener("message", messageHandler, true);
function messageHandler(e) {
    // only recognize message from this origin
    if (e.origin === "www.sitewithinmysite.com") {
        // then you can navigate your page with the link passed in
        window.location = e.data;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...