我正在处理一些遗留代码,我正在寻找一种安全的方法来处理以下情况:
我有一个显示产品选择页面的iframe。我需要将此iframe传递给带有查询字符串的回调函数的名称。
在iframe中,我从查询字符串中获取回调名称并执行它,如下所示:
$("iframe#content:first", window.top.document)[0].contentWindow[callbackName]();
但这仅在回调是全局公开函数时才有效。那太蹩脚了。 此回调应该存在于嵌套对象中。
我有什么方法可以指定回调,如:
'myNamespace.nestedNamespace.myCallbackFunction'
并从contentWindow对象执行它?
答案 0 :(得分: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();
}