Как получить родительский элемент iframe с внутренней страницы, не зная id? - PullRequest
7 голосов
/ 30 июня 2010

Давайте представим, что у меня есть что-то вроде этого:

<html>
...
    <div>
        <iframe src="test.html" hash="r4d5f7"></iframe>
        <iframe src="test.html" hash="8f7x97"></iframe>
        <iframe src="test.html" hash="gg4v5e"></iframe>
        <iframe src="test.html" hash="e54f87"></iframe>
    </div>
...
</html>

test.html - пустая страница, пользовательский атрибут hash всегда имеет другое значение, обе страницы находятся в одном домене из соображений безопасности,количество и порядок элементов iframe является случайным.

Мой вопрос таков: есть ли способ перейти с внутренней страницы (test.html) с помощью Javascript на соответствующий элемент iframe?Допустим, я на третьей странице iframe, и мне нужно добраться до его элемента iframe и значения хеш-функции alert () (в данном случае "gg4v5e").

Чтобы быть более конкретным.Если вы знакомы с Firebug Firefox, он визуализирует эту ситуацию следующим образом:

<html>
...
    <div>
        <iframe src="test.html" hash="r4d5f7">
            <html>
                 ...
            </html>
        </iframe>
        <iframe src="test.html" hash="8f7x97">
            <html>
                 ...
            </html>
        </iframe>
        <iframe src="test.html" hash="gg4v5e">
            <html>
                 ...
            </html>
        </iframe>
        <iframe src="test.html" hash="e54f87">
            <html>
                 ...
            </html>
        </iframe>
    </div>
...
</html>

Можно ли вызвать "что-то", чтобы получить родительский элемент (<iframe>), когда я с моим Javascriptна <html> элемент на внутренней странице?

1 Ответ

17 голосов
/ 30 июня 2010

Конечно, есть.Этот код работает в FF и IE6, Opera, Chrome (требуется веб-сервер и оба файла, поступающие с одного и того же протокола домена и порта)

        function getHash()   {
           var ifs = window.top.document.getElementsByTagName("iframe");
           for(var i = 0, len = ifs.length; i < len; i++)  {
              var f = ifs[i];
              var fDoc = f.contentDocument || f.contentWindow.document;
              if(fDoc === document)   {
                 alert(f.getAttribute("hash"));
              }
           }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...