2013-04-22 67 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();' – 2013-04-22 01:34:06

+1

在調用頁面之前,名稱空間和深度是未知的。我希望其他開發人員將此頁面傳遞給一個回調來執行。 如果我確切知道我想調用哪個函數,這將起作用。 – BentOnCoding 2013-04-22 01:35:22

回答

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 2013-04-22 01:48:56

+0

太棒了!很高興我可以幫助:) – 2013-04-22 02:06:57

相關問題