javascript - 如何从父网页运行 iFrame 的脚本?

标签 javascript html iframe cross-domain

好吧,假设我有一个网页,网页 B。网页 B 有一个名为“test()”的函数。现在假设我有另一个网页,网页 A。网页 A 有一个带有网页 B 源的 iFrame。我如何从网页 A 执行网页 B 的“test()”函数?

最佳答案

您不能通过父页面中的任何代码“直接”控制 iframe 中页面的 javascript。

但是,如果您能够更改这两个页面,则可以更改“页面 B”以根据其查询字符串中的参数运行 javascript。

在“页面 A”中,将 iframe src 设置为类似以下内容:

http://mydomain.com/pageb.html?func=myfunc¶m=foo¶m2=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 '(比如帧中断的工作原理)。

关于javascript - 如何从父网页运行 iFrame 的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265157/

相关文章:

javascript - 如何仅检查事件选项卡复选框?它也在检查其他人

javascript - Kendo UI Treeview - 绑定(bind)到本地数据时更新复选框状态

html - 滚动内部滚动条页面时滚动

javascript - 由于 iframe 的导航,如何更改浏览器中的 URL?

javascript - 使用javascript的iframe问题

jquery - twitter bootstrap 下拉菜单在应该关闭时没有切换

javascript - 退回 Javascript 第二阶段的浏览器 'back' 按钮?

javascript - 禁用按钮,除非从预先输入自动完成中选择

html - 为什么 flexbox 在包装元素时不将后续内容向下推?

html - 来自外部 CSS 的彩色 SVG