3

さて、私がウェブページ、ウェブページBを持っているとしましょう。ウェブページBには「test()」と呼ばれる関数があります。ここで、別のWebページWebページAがあるとします。WebページAには、WebページBのソースを持つiFrameがあります。WebページAからWebページBの「test()」関数を実行するにはどうすればよいですか。

4

1 に答える 1

1

親ページのコードによって、iframe内のページのJavaScriptを「直接」制御することはできません。

ただし、両方のページを変更できる場合は、「ページB」を変更して、クエリ文字列のパラメータに基づいてjavascriptを実行できます。

'ページA'でiframesrcを次のように設定します。

http://mydomain.com/pageb.html?func=myfunc&param=foo&param2=bar

次に、「ページB」で次のようなJavaScriptを実行します。

function queryToLookup(query) {
    var lookup= {};
    var params= query.slice(1).split(/[&;]/);
    for (var i= 0; i<params.length; i++) {
        var ix= params[i].indexOf('=');
        if (ix!==-1) {
            var name= decodeURIComponent(params[i].slice(0, ix));
            var value= decodeURIComponent(params[i].slice(ix+1));
            if (!(name in lookup))
                lookup[name]= [];
            lookup[name].push(value);
        }
    }
    return lookup;
}

function myTestFunc(p1, p2) {
    alert('param 1 is ' + p1 + ' and p2 is ' + p2);
}

jQuery(document).ready(function() {
    var params = queryToLookup(location.search);
    switch(lookup['func'])
    {
        case 'myfunc': myTestFunc(params['param1'], params['param2']);
        case 'otherfunc': myTestFunc('someval', params['param1']);
        default: alert('No function requested');
    }
});

これはもちろん非常に基本的な例ですが、あらゆる種類のクレイジーなことを行うように適合させることができます。制限は、実際にはメッセージを「ページA」に戻すことができないことですが、「ページA」の手法を適応させてから呼び出すことはできますtop.location = 'pagea.html?message=foo'(フレームブレークの仕組みなど)。

于 2012-07-04T23:39:17.087 に答える