2013-04-22 68 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

相关问题