cari

Rumah  >  Soal Jawab  >  teks badan

javascript - 用document.title=“xxx”动态修改title,在ios的微信下面不生效

js修改title,在ios的微信下面不生效,有什么解决办法吗?

PHP中文网PHP中文网2836 hari yang lalu537

membalas semua(6)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-10 17:30:17

            //需要jQuery
            var $body = $('body');
            document.title = 'title';
            // hack在微信等webview中无法修改document.title的情况
            var $iframe = $('<iframe src="/favicon.ico"></iframe>');
            $iframe.on('load',function() {
                setTimeout(function() {
                    $iframe.off('load').remove();
                }, 0);
            }).appendTo($body);
    

    楼主可以试试这个hack,我没有apple没法测试

    refer:微信前端开发有哪些坑或者黑魔法

    balas
    0
  • 怪我咯

    怪我咯2017-04-10 17:30:17

    为了使 Safari 极简和尽可能地显示网页内容,Safari 8 在只打开一个页面时,竟然连网页标题都省略不显示了。但别怕,还是有办法把它找回来的。
    在只有一个网页时,你只需要开启菜单中的「View -> Show Tab Bar」,就会像以前一样,即使只有一个网页,也显示标签栏了,而且只需要操作一次,Safari 会记住你的选择。

    balas
    0
  • PHPz

    PHPz2017-04-10 17:30:17

    @savokiss 的方法是可以实现的,但是如果是在请求的回调中加入这段代码,是不行的

    简单调查了一下,如果把代码放入setTimeout中,就无效了

    setTimeout(function(){
        //需要jQuery
        var $body = $('body');
        document.title = 'test';
        // hack在微信等webview中无法修改document.title的情况
        var $iframe = $('<iframe src="/favicon.ico"></iframe>');
        $iframe.on('load',function() {
            setTimeout(function() {
                $iframe.off('load').remove();
            }, 0);
        }).appendTo($body);
    },0);

    js 改动title的话大部分是因为需要从后台获取吧,那这个方法肯定是用不了,我找时间研究一下,再来补充

    补充:

    //以下代码可以解决以上问题,不依赖jq
    setTimeout(function(){
        //利用iframe的onload事件刷新页面
        document.title = 'test';
        var iframe = document.createElement('iframe');
        iframe.style.visibility = 'hidden';
        iframe.style.width = '1px';
        iframe.style.height = '1px';
        iframe.onload = function () {
            setTimeout(function () {
                document.body.removeChild(iframe);
            }, 0);
        };
        document.body.appendChild(iframe);
    },0);

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:30:17

    开始的时候不写title 标签,需要的时候直接 document.title 就可以了

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 17:30:17

    在微信6.5.3版本后用iframe的方式就不好使了。

    所以在一些SPA中,使用框架的路由用这种方式不起作用了。

    我是用location.href来进行页面的强刷,路由还是定义好路由的规则,但是通过location.href去接管页面的跳转。好使。

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-10 17:30:17

    封装了一个只在IOS的状态下处理的方法:

    setDocumentTitle = function(title) {
            document.title = title;
            if (/ip(hone|od|ad)/i.test(navigator.userAgent)) {
                var i = document.createElement('iframe');
                i.src = '/favicon.ico';
                i.style.display = 'none';
                i.onload = function() {
                    setTimeout(function(){
                        i.remove();
                    }, 9)
                }
                document.body.appendChild(i);
            }
        }

    balas
    0
  • Batalbalas