2013-04-22 4 views
1

Я работаю с некоторым устаревшим кодом, и я ищу безопасный способ справиться со следующим сценарием:Можно ли вызвать функцию с именами с помощью jquery contentWindow?

У меня есть iframe, показывающий страницу выбора продукта. Мне нужно передать это iframe имя функции обратного вызова с строкой запроса.

В IFRAME я получаю имя обратного вызова из строки запроса и выполнить его так:

$("iframe#content:first", window.top.document)[0].contentWindow[callbackName](); 

Но это работает только, если обратный вызов глобально подвергается функции. Это глупо. Этот обратный вызов должен находиться во вложенном объекте.

Есть ли способ, я могу указать обратный вызов, как:

'myNamespace.nestedNamespace.myCallbackFunction' 

и выполнить его объекта contentWindow?

+0

Я не могу проверить прямо сейчас, но как насчет '... [0] .contentWindow.myNamespace .nestedNamespace.myCallbackFunction(); ' –

+1

Пространства имен и глубина неизвестны до тех пор, пока страница не будет вызвана. Я хочу, чтобы другой разработчик передал этой странице обратный вызов для выполнения. Это будет работать, если я точно знаю, какую функцию я хочу назвать. – BentOnCoding

ответ

1

В том случае, если я правильно понимаю, что-то вроде следующего должен сделать трюк:

// Your callback "path". 
var callbackPath = 'myNamespace.nestedNamespace.myCallbackFunction'; 
if (callbackPath != '') { 
    // We will need to walk our way to the actual callback. 
    var parts = callbackPath.split('.'); 
    var callback = $("iframe#content:first", window.top.document)[0].contentWindow; 

    for (var i = 0; i < parts.length; ++i) { 
     callback = callback[ parts[i] ]; 

     // Was unable to find callback, bail! 
     if (!callback) 
      break; 
    } 

    if (typeof callback === 'function') 
     callback(); 
} 
+1

Это довольно красивый javascriptz прямо там. – BentOnCoding

+0

Удивительный! рад, что я мог бы помочь :) –

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