1

私はいくつかのレガシーコードを扱っており、次のシナリオを処理する安全な方法を探しています:

製品選択ページを表示する iframe があります。この iframe に、クエリ文字列を含むコールバック関数の名前を渡す必要があります。

iframe では、クエリ文字列からコールバック名を取得し、次のように実行します。

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

ただし、これは、コールバックがグローバルに公開された関数である場合にのみ機能します。ださいよ。このコールバックは、ネストされたオブジェクトに存在する必要があります。

次のようなコールバックを指定する方法はありますか:

'myNamespace.nestedNamespace.myCallbackFunction'

contentWindow オブジェクトから実行しますか?

4

1 に答える 1

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();
}
于 2013-04-22T01:41:08.037 に答える