2010-02-12 5 views
21

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

<iframe name="thename"> 
    <script type="text/javascript"> 
    alert(parent.name); 
    </script> 
</iframe> 

ответ

47

Вы были почти правы. Установка атрибута name на frame или iframe задает для этой строки свойство name глобального фрейма window. (Не parent, который относится к окну документа, которому принадлежит кадр.)

Так что, если какой-либо другой сценарий не намеренно изменил название, это так просто, как:

1.html: 
<iframe name="tim" href="2.html"></iframe> 

2.html: 
<script type="text/javascript"> 
    alert(window.name); // tim 
</script> 
+4

Как получить доступ к атрибутам iframe? например, если у него есть набор данных attr? – AlexStack

+8

@AlexStack: 'window.frameElement' возвращает вам элемент из родительского документа, который ссылается на вас непосредственно, вы можете« getAttribute »на нем (при условии, что у вас есть доступ SOP). См. Http: // stackoverflow.com/questions/4097870/jquery-access-iframe-id-from-iframe-content/4098384 # 4098384 для резервного копирования, где не доступно – bobince

0

Что-то, как это должно работать:

parent.document.getElementById('idhere').name; 

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

Так что ваш код должен быть как:

<iframe name="thename"> 
<script type="text/javascript"> 
    var iframeName = parent.document.getElementById('idhere').name; 
</script> 
</iframe> 
+2

Что делать, если вы не знаете, идентификатор или iframe находится в отдельном домене? –

+0

Вам нужно будет использовать getElementsByTagName и перебирать результаты по некоторым критериям. –

0

Ну, IFRAME элемент не должен содержать ничего, что это нацеливание другой документ. Поэтому использование тега SCRIPT внутри IFRAME не имеет большого смысла. Вместо этого используйте SCRIPT внутри вызываемого документа, например.

iframe_caller.html:

<html> 
<body> 
    <iframe id="theIframe" name="theIframe" src="iframe_doc.html"></iframe> 
</body> 
</html> 

iframe_doc.html:

<html> 
<body> 
    <script type="text/javascript"> 
    var iframes= parent.document.getElementsByTagName("iframe"); 
    document.write(iframes[0].getAttribute("id")); 
    </script> 
</body> 
</html> 

Примечание Я использую parent.document.function() там.

43

Существует комбинация ответы, которые я предпочитаю:

// window.frameElement Gets IFrame element which document inside 
window.frameElement.getAttribute("Name"); 

Он работает на IE7 +, Mozilla & Chrome

+2

Мне нравится этот ответ больше, чем принятый ответ, потому что он ссылается на фактический элемент iframe. – keyneom

+0

Это не работает на http://publisherconsole.appspot.com/safeframe/creative-preview.html, любые предложения? – PayteR

+0

Я понял это https://stackoverflow.com/a/46128839/839434 – PayteR

1

в некоторых случаях window.frameElement возвращает null в iframe, поэтому я решил обходное решение для него.

1. Вы должны установить хэш в ИПВ URL в IFRAME

<iframe name="tim" href="2.html#your-hash"></iframe> 

2. в IFRAME вы можете получить этот хэш с

<script type="text/javascript"> 
    var hash = window.location.hash; 
</script> 
Смежные вопросы