总结iframe onload事件无法监听的问题

目的:做一个web页面,希望能够在ios平台上动态更改title,项目中要求从服务器获取数据,然后动态更改html的title。

原因:一般更换title,通过方法 document.title = “title”就可以了,但是ios规定在页面完成后就不在监听更改title的事件了,所以不能用这个方法来更改title。

从网上找了些方法:基本思路是动态创建iframe,ios就可以进行刷新,更换title,然后 加载完成后删除iframe;


1、利用jquery做的

在服务器回调中进行,在最外层加上setTimeout();这个方法我试了,如果在html页面中进行,是可以正常工作,但如果在一般的js文件里就不行,原因不清楚,可能原因是ifame create的时候浏览器就默认加载完成了,所以不触发onload事件。

setTimeout(function(){
var $body = $('body');

  document.title = 'the title you want to set';
  var $iframe = $("<iframe style='display:none;' src='./icon.png'></iframe>");
  $iframe.on('load',function() {
 
    setTimeout(function() {
      $iframe.off('load').remove();
    }, 0);
  }).appendTo($body);
}, 0);


2、js版本的

效果跟jquery差不多

  setTimeout(function(){
    //利用iframe的onload事件刷新页面
       
        document.title = title;
        var iframe = document.createElement('iframe');
        iframe.style.visibility = 'hidden';
        iframe.style.display="none";
        iframe.style.width = '0px';
        iframe.style.height = '0px';
        iframe.src = "https://res.wx.qq.com/";
        iframe.onload = function () {
           
            setTimeout(function () {
                document.body.removeChild(iframe);
            }, 0);
        };
        document.body.appendChild(iframe);
    },0);



3、生成div,然后在div的innerHtml中动态生成iframe

这个方法在ios环境可以正常运行,比上两种方法更好用

var div = document.createElement("div");
  div.innerHTML = "<iframe style=\"display:none; width:0px;height:0px;\" οnlοad=\"javascript:alert('loaded -includeFrame');\" src=\"https://res.wx.qq.com/\"></iframe>";
  document.body.appendChild(div);





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值