首页 文章

有没有办法检索从iframe发送的ajax响应?

提问于
浏览
1

我想知道是否有任何方法可以检索从iframe发送的ajax请求的响应 .

iframe执行以下操作:

iframe中的

  • 脚本发送ajax请求

  • iframe获得响应,并更新iframe中的内容

我想要做的是拦截iframe之外的请求,并使用该信息来更新页面 .

如果您使用chrome的开发工具,并转到网络标签,则可以看到iframe发出的请求/响应 . 如果有一个窗口事件或类似的东西,每次响应进入页面时都会触发它会很好 .

注意:iframe是不在同一域中的页面 .

3 回答

  • 5
    (function() {
        var origOpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function() {
            this.addEventListener('load', function() {
                var json = $.parseJSON(this.responseText);
    
    
            });
            origOpen.apply(this, arguments);
        };
    })();
    
  • 2

    从理论上讲,由于同源策略,禁止在两个跨域iframe之间进行通信,请参考此页:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

    在HTML5之前,我们有一些解决方法:

    HTML5:

    我的建议是使用解决方案1,它几乎适用于所有主流浏览器 .

  • 0

    如果子iframe与父级不在同一个域中,那么您无法真正做任何可以跨浏览器工作的东西 . 请参阅下面的jasonjifly的答案,了解适用于某些浏览器的技术,假设您可以控制两个框架上的客户端脚本 .

    如果父母和孩子在同一个域中,那么您可以实现所需的目标 .

    例如,假设您正在使用jquery,则可以在iframe中使用此代码:

    $.ajax(function() {
       .....
       complete: function() {
           window.parent.onAjaxComplete('Hi there');
       }
    });
    

    与父框架中的此代码一起:

    function onAjaxComplete(msg)
    {
        alert(msg);
    }
    

    要在跨域方案中实现类似结果,您可以让父帧轮询服务器 . 当服务器从子iframe接收到ajax请求时,它可以通过轮询服务提醒父页面 . 显然,如果您可以控制子iframe调用的服务,这将是合适的 .

相关问题