2015-05-05 3 views
3

У меня есть страница с , а внутри этого еще появляется как окно. То, что я пытаюсь сделать, это вызвать функцию taht, установленную в .... Я знаю, много того же тега происходит.Настройка контекста javascript для iFrame в iFrame

Вот что я имею в виду в формате HTML.

<body> 
<iframe src="blahblah.html" name="iframe"> 
    //blahblah.html html 
    <iframe src="blahblahpopup.html" name="iFrame2"> 
    //blahblahpopup.html html, also where the function is set. 
    </iframe> 
</iframe> 
</body> 

Итак, как вы можете видеть, есть в .

Теперь давайте перейдем к делу. Я использую этот JS-код, чтобы получить свой контекст JS в первый уровень с именем «» IFRAME

window.frames['iframe'].showAssetPicker(); 

Что это делает это вызывает всплывающее окно внутри первого уровня . Но теперь мне нужно вызвать функцию внутри всплывающего окна, которое только что было вызвано. (Это еще один ... Я не причина всех -х ...)

Так вот моя неудачная попытка вызова функции, определенной на втором уровне ...

window.frames['iframe'].frames['iFrame2'].populateTypePullDown('/vsg/ipm/SecuredOfferRepository'); 

Я также попытался

window.frames['iframe'].window.frames['iFrame2'].populateTypePullDown('/vsg/ipm/SecuredOfferRepository'); 

ни похоже на работу. Любая помощь в этом? Я использую node-webkit для удаления ограничений безопасности .

Спасибо за любую помощь, которую вы можете бросить в мою сторону!

P.S. Боже милостивый, я сказал слишком много раз в этом посте.

+0

Вы пытались использовать 'window.frames ['iframe']. ContentWindow' вместо этого? –

+0

Любые ошибки в консоли браузера? –

+0

В нем указано, что функция не определена. Это означает, что я не попадаю в правильный контекст. –

ответ

2

Возможно, проблема заключается в том, что вы не ждете, прежде чем загрузится сборщик активов, и поэтому функция populateTypePullDown еще не определена.

попробовать что-то вроде этого:

$('#iframe') 
    .ready(function() { 
     var $innerIframe = $(this).contents().find('#iFrame2'); 
     console.log($innerIframe, 'ready'); 
     $innerIframe.get(0).contentWindow.populateTypePullDown('/vsg/ipm/SecuredOfferRepository'); 
    }) 
    .get(0).contentWindow.showAssetPicker(); 
+0

Звучит как хороший ответ, но я просто вычислил его, используя ваш ответ из другого вопроса. :) –

+0

Рад, что вы отсортировали его самостоятельно. :) –

+0

Не возражаете, если я попрошу вас еще раз? Как я могу запустить скрипт в контексте iframe? Например, вместо вызова функции. –

0

Разобрался ответ. То, что я сделал, было достигнуто в главном и получило содержимоеWindow внутри.

$('#iframe').contents().find('#iFrame').get(0).contentWindow.performSearch();