jQuery - 页面加载(?)问题的序列

时间:2013-09-02 14:16:15

标签: javascript jquery iframe

修改

修正如下,只需通过将高度和宽度设置为零来隐藏iframe:

<iframe frameborder="0" id="frm" height="0" width="0"></iframe>

var frmurl ='http://www.bbc.co.uk';

jQuery(function($){
        $('#frm').attr('src', frmurl);
        var doc = $('#frm')[0].contentDocument;
        $(doc.body).html('This text should replace the BBC website');  
});

我的网站依赖第三方系统来更新数据库中的记录并显示确认消息。通过iFrame访问第三方系统。我想用自己的一个替换确认消息。

我使用jQuery并且我使iFrame正常工作,除了在第三方系统生成的确认消息覆盖之前我的替换文本显示非常短暂。您可以看到示例at this jsFiddle

如何确保我的文字不会被覆盖?我认为这与生成页面的事件序列有关吗?

<iframe frameborder="0" id="frm" scrolling="no" width="100%"></iframe>

var frmurl ='http://www.bbc.co.uk';

jQuery(function($){
        $('#frm').attr('src', frmurl);
        var doc = $('#frm')[0].contentDocument;
        $(doc.body).html('This text should replace the BBC website');   
});

2 个答案:

答案 0 :(得分:1)

加载IFRAME是异步的。你或许可以这样做:

jQuery(function($){
        $('#frm').attr('src', frmurl).load(function() {
            var doc = $(this)[0].contentDocument;
            $(doc.body).html('This text should replace the BBC website');
        });  
});

等待IFRAME加载,然后尝试修改它。

但是,我不确定这是否会被允许 - 您不能操纵从其他域加载的IFRAME的内容。

更新:

我是对的,它不起作用。我试过这个fiddle和控制台日志:

  

阻止原始"http://fiddle.jshell.net"的框架访问来源"http://www.bbc.co.uk"的框架。协议,域和端口必须匹配。

你不能做你想做的事。

答案 1 :(得分:0)

更新<iframe>“src”属性基本上是一个显式请求,浏览器使用从给定URL获取的内容更新帧。因此,要求浏览器都这样做并且不这样做是没有意义的:)

然而,您可以做的是将您的信息放在其他地方而不是<iframe>。无论<iframe>是否可见,HTTP事务都会有效,因此如果您不希望用户看到结果,您只需通过CSS或其他任何内容隐藏<iframe>