vue 2.0 單頁面應(yīng)用動(dòng)態(tài)修改微信中的title

使用vue做單頁面應(yīng)用的時(shí)候蟋恬,修改title始終是一個(gè)非常重要的問題翁潘。由于單頁面應(yīng)用(SPA項(xiàng)目)里整個(gè)頁面只在第一次完全刷新,后面只會(huì)局部刷新(一般不包括head及里面的title)歼争,微信瀏覽器首次加載頁面初始化title后拜马,就再也不監(jiān)聽 document.title的change事件,所以無法在服務(wù)器端控制title沐绒。
如果不考慮iOS微信瀏覽器中上面使用俩莽,可以用下面的方法:

router.map({
  '/auth': {
      title: '入口頁面',
      component(resolve) {
         require(['./views/auth'], resolve);
      }
 })}

在beforeEach中通過document.title來改變title的值。

 router.beforeEach(({ to, from, next }) => {
     document.title = to.title || 'title名稱'
})

上面這種方法還是在用vue 1.0的時(shí)候?qū)懙那钦冢梢愿鶕?jù)自己的需要來改成vue 2.0的代碼扮超。

如果要兼容大部分常用的移動(dòng)端,光上面這種寫法是肯定不夠的。
好在通過網(wǎng)上搜索和自己的摸索出刷,找到了兩種解決辦法璧疗,兩種解決辦法都能用,基本上也是通過看網(wǎng)上其他朋友給出的解決方案來優(yōu)化的馁龟,今天抽點(diǎn)時(shí)間把他們整理一下崩侠,以便后面使用,也希望能幫到一些需要的朋友坷檩,代碼中可能會(huì)有一些問題却音,發(fā)現(xiàn)了的朋友還望多多指點(diǎn)。

兩種方法的原理:都是動(dòng)態(tài)給頁面加上一個(gè)內(nèi)容為空的iframe矢炼,隨后立即刪除這個(gè)iframe系瓢,這時(shí)候就會(huì)刷新title。
第一種方法需要注意:由于微信iOS瀏覽器內(nèi)核由UIWebView更新為WKWebView裸删,所以必須版本升級(jí)到微信6.5.5此功能才可以正常使用八拱,WKWebView 是蘋果在iOS 8中引入的新組件,目的是提供一個(gè)現(xiàn)代的支持最新Webkit功能的網(wǎng)頁瀏覽控件涯塔,擺脫過去 UIWebView的老肌稻、舊、笨匕荸,特別是內(nèi)存占用量巨大的問題爹谭。它使用與Safari中一樣的Nitro JavaScript引擎,大大提高了頁面js執(zhí)行速度榛搔。
第二種方法具體來說就是通過動(dòng)態(tài)創(chuàng)建iframe诺凡,設(shè)置相應(yīng)的樣式屬性,并在iframe中增加一張圖片践惑,使其在每次創(chuàng)建的時(shí)候都會(huì)去加載這張圖片腹泌,然后立即刪除這個(gè)iframe,做這個(gè)目的就是為了微信重新去更新相應(yīng)的一些屬性尔觉,然后觸發(fā)document.title的change事件凉袱,將新的title的值替換。

我們把修改title的代碼單獨(dú)寫在一個(gè)utils.js文件侦铜,可以放在你項(xiàng)目的根目錄下专甩,也可以單獨(dú)添加一個(gè)文件夾放,只要知道引用的地址是什么就好钉稍,我們現(xiàn)在的項(xiàng)目就直接放在了跟main.js同級(jí)的目錄下涤躲。

下面是utils.js文件中的內(nèi)容:


// 第一種修改title的方法 :
const setWechatTitle = function(title) {
    document.title = title;
    let mobile = navigator.userAgent.toLowerCase();
    if (/iphone|ipad|ipod/.test(mobile)) {
        let iframe = document.createElement('iframe');
        iframe.style.visibility = 'hidden';
        // 替換成站標(biāo)favicon路徑或者任意存在的較小的圖片即可
        iframe.setAttribute('src', '//m.baidu.com/favicon.ico');
        let iframeCallback = function() {
            setTimeout(function() {
                iframe.removeEventListener('load', iframeCallback)
                document.body.removeChild(iframe)
            }, 10)
        };
        iframe.addEventListener('load', iframeCallback)
        document.body.appendChild(iframe)
    }
};

// 第二種修改title的方法,其中包含iframe的設(shè)置:
let setTitleHack = function (t) {
    document.title = t;
    let iframe = document.createElement('iframe');
    iframe.style.visibility = 'hidden';
    iframe.style.width = '1px';
    iframe.style.height = '1px';
    iframe.src = '//m.baidu.com/favicon.ico';
    iframe.onload = function () {
        setTimeout(function () {
            iframe.remove();
        }, 10);
    };
    document.body.appendChild(iframe);
};

// 在文件的最下方輸出這兩個(gè)方法:
module.exports = {
    setWechatTitle,
    setTitleHack
};

準(zhǔn)備好上面的代碼贡未,接下來就看你需要在哪里使用了种樱,如果是單頁面應(yīng)用的話蒙袍,我們一般是在router.js文件中使用,因?yàn)槁酚蓪?dǎo)航發(fā)生時(shí)會(huì)執(zhí)行鉤子缸托,我們可以使用 router.beforeEach 注冊(cè)一個(gè)全局的 before 鉤子左敌,然后在router.beforeEach((to, from, next) => {...})修改title。
使用方式如下:

一俐镐,先在router.js文件中引入utils.js文件矫限。

import { setTitleHack } from './utils';

vue 2.0定義路由的時(shí)候,可以將所有的路由都放在一個(gè)組件配置對(duì)象中佩抹,同時(shí)叼风,可以配置 meta 字段,在其中添加一個(gè)title的屬性棍苹,值就是你這個(gè)頁面要顯示頁面上方的title无宿,像下面這樣:

const routes = [
    {path: '/auth', component: auth, name: 'auth', meta: {title: '?授權(quán)頁'}},
    {path: '/home', component: Home, name: 'home', meta: {title: ' 首頁' }},
];

顯示到手機(jī)上的效果如下:


WechatIMG1.jpg

二,在beforeEach中直接像下面這樣寫就可以了枢里。

router.beforeEach((to, from, next) => {
    setTitleHack(to.meta.title);
    next();
});

三孽鸡,還有一種情況就是在單個(gè)組件中使用,比如說你當(dāng)前這個(gè)頁面的title是根據(jù)不同用戶的姓名來栏豺,而用戶的姓名都是通過后臺(tái)來獲取的彬碱,是動(dòng)態(tài)的,所以奥洼,需要在用戶詳情的頁面中來動(dòng)態(tài)修改title巷疼,使用方式其實(shí)也差不多,下面就讓我們來看一下代碼:

同樣也是先引用灵奖,我這次把兩個(gè)方法都引用進(jìn)來嚼沿,上面我們用的是setTitleHack,下面我們來用一下setWechatTitle:

import { setWechatTitle, setTitleHack } from './../utils';

在我現(xiàn)在這個(gè)項(xiàng)目中瓷患,取數(shù)據(jù)的過程是在beforeCreate鉤子中做的骡尽,項(xiàng)目中獲取數(shù)據(jù)用的是vue-resource,修改title就在取到了數(shù)據(jù)以后擅编,下面來看代碼:

beforeCreate(){
      let group_id = this.$route.params.id;
      let dataUrl = "group/detail?group_id=" + group_id;
      this.$http.get(dataUrl)
            .then(({data:{code, content, jssdk, msg}}) => {
                  if (code === 0) {
                        this.content = content;
                        setWechatTitle(content.header.name + '團(tuán)');
                        // 取到名稱之后直接修改title爆阶。
                    } else {
                        MessageBox('提示', msg);
                    }
                }, ({data:{msg}}) => {
                    MessageBox('提示', msg);
                });
        },

以上兩種方法我在項(xiàng)目中都用過,親測(cè)有效沙咏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市班套,隨后出現(xiàn)的幾起案子肢藐,更是在濱河造成了極大的恐慌,老刑警劉巖吱韭,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異境输,居然都是意外死亡阶女,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門凑阶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衷快,你說我怎么就攤上這事宙橱。” “怎么了蘸拔?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵师郑,是天一觀的道長。 經(jīng)常有香客問我调窍,道長宝冕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任邓萨,我火速辦了婚禮地梨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缔恳。我一直安慰自己宝剖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布褐耳。 她就那樣靜靜地躺著诈闺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铃芦。 梳的紋絲不亂的頭發(fā)上雅镊,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音刃滓,去河邊找鬼仁烹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咧虎,可吹牛的內(nèi)容都是我干的卓缰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼砰诵,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼征唬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茁彭,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤总寒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后理肺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摄闸,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡善镰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了年枕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炫欺。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熏兄,靈堂內(nèi)的尸體忽然破棺而出品洛,到底是詐尸還是另有隱情,我是刑警寧澤霍弹,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布毫别,位于F島的核電站,受9級(jí)特大地震影響典格,放射性物質(zhì)發(fā)生泄漏岛宦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一耍缴、第九天 我趴在偏房一處隱蔽的房頂上張望砾肺。 院中可真熱鬧,春花似錦防嗡、人聲如沸变汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裙盾。三九已至,卻和暖如春他嫡,著一層夾襖步出監(jiān)牢的瞬間番官,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工钢属, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徘熔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓淆党,卻偏偏與公主長得像酷师,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子染乌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容