日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动端分享插件使用总结

發布時間:2024/4/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动端分享插件使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 對于分享插件來說,大家肯定都很熟悉,最常用的就是百度分享、jiathis分享等,可分享的媒體也非常多,當然最常用的需求無非也就新浪微博、QQ空間、QQ好友、微信朋友圈、微信好友,其他什么亂七八糟的人人網、貓撲、豆瓣就不多做考慮了,插件內的更多選項列出來有20多個。。。

既然插件功能已經這么完善了,那還有什么好說的,看看文檔就能解決了還有什么好總結的?

但是,問題來了,以上的插件在微信分享時,都是生成一個二維碼供用戶手機掃一掃,如下圖:

這在pc端沒問題,但是在移動端的時候,如果瀏覽器不支持長按識別二維碼功能。。。(我能怎么掃啊,我也很絕望啊),而且即使支持也會感覺用戶體驗很差,分享很費勁。。。

所以,本篇總結的是 如何盡可能的在移動端瀏覽器中使用微信分享功能(盡可能。。。。有的地方真的,臣妾做不到啊。),本文中主要是對網上個方法的總結,個人使用經驗,沒有什么原創干貨。

?

開始進入正題:

  需求:需要在微信、各種移動端瀏覽器、QQ內置瀏覽器中實現將頁面分享至微信好友、朋友圈、新浪微博、QQ好友、QQ空間。

  分析:常用插件(百度、jiathis等)對于移動端的微信分享會出現上面剛開始討論的問題,手機上彈出二維碼無法使用,其他的媒體分享方式倒是正常,所以就移動端微信分享的問題進一步學習。

  經過一番資料查找發現:

  • 微信中,只能通過提示點擊右上角進行分享
  • QQ瀏覽器、UC瀏覽器可通過開放的API調用微信分享
  • 其他的瀏覽器沒有明確的分享接口,但是大都可以手動通過設置菜單進行分享到微信中
  • 其他的瀏覽器沒有明確的分享接口,可以通過URL scheme調整至QQ瀏覽器(前提是要安裝了QQ瀏覽器)
  •   參考資料:

      一個在手機網頁端可以直接調用原生分享的js?

      ?soshm.js?一個具有中國特色的社交分享組件? ??demo

    ?

      經過一番查找,最后使用soshm.js進行功能開發,因為soshm.js使用webpack把圖標、css、js等都打包成一個soshm.js,引用方便,而且樣式也不錯,也能達到需要的配置功能,所以。。。。。

      使用后。。。。測試后。。。。

      根據自己的需求對源碼做了一些修改,總結下該插件的幾個問題:

  • UC瀏覽器使用分享時,自定義圖片無效,直接截屏,會截取到分享的彈窗遮罩(這個是UC瀏覽器的問題)
  • QQ內置瀏覽器中無法使用分享功能,測試就分享到騰訊微博有跳轉(暫定解決辦法:同微信提示右上角菜單分享)
  • QQ內置瀏覽器使用右上角自帶分享功能如何自定義標題圖片鏈接等的問題 QQ對外分享組件接口文
  • 除QQ、UC瀏覽器之外的瀏覽器對于分享至微信好友、微信朋友圈的處理
  •   好了,現在就對問題一個一個來修改吧:

      問題一:UC瀏覽器使用分享時,自定義圖片無效,直接截屏,會截取到分享的彈窗遮罩(這個是UC瀏覽器的問題);

        查看soshm.js中關于UC瀏覽器操作代碼:

    1 if (device.isUCBrowser) { //判斷是uc瀏覽器 2 if (nativeShareApps[site]) { //判斷選擇的分享方式是否支持 3 app = device.isIOS ? nativeShareApps[site][0] : nativeShareApps[site][1]; //區分IOS和安卓不同的方法名稱 4 } 5 6 if (app !== undefined) { 7 shareInfo = [data.title, data.digest, data.url, app, '', '@'+data.from, '']; //配置分享信息 8 9 // android 10 if (window.ucweb) { 11 ucweb.startRequest && ucweb.startRequest('shell.page_share', shareInfo); 12 } 13 14 // ios 15 if (window.ucbrowser) { 16 ucbrowser.web_share && ucbrowser.web_share.apply(null, shareInfo); 17 } 18 return; 19 } 20 }

        從第7行中發現配置的shareInfo數據第二項為自定義圖片路徑,但是實際使用時會發現 data.digest 會顯示在 簡介 中,而圖片是截屏,

        網上找了很久,沒有找到對應的UC瀏覽器的分享接口,這就很尷尬了,也試著改變 data.digest的位置,沒有收效,所以。。。最后只能選擇一個折中的辦法:

          圖片使用截屏,但要隱藏分享插件的遮罩層,盡量顯示頁面的內容,所以,繼續改soshm.js咯

          下方代碼為 點擊分享按鈕,彈窗分享遮罩,并給按鈕綁定事件,點擊空白處關閉遮罩的方法;

    1 soshm.popIn = function(options) { 2 var popDelegation; 3 var pop = doc.querySelector('.soshm-pop'); 4 if (!pop) { 5 pop = doc.createElement('div'); 6 pop.className = 'soshm-pop'; 7 body.appendChild(pop); 8 } 9 10 options = extend({}, defaults, options); 11 pop.innerHTML = 12 '<div class="soshm-pop-sites">' + 13 getSitesHtml(options.sites, 3) + 14 '</div>'; 15 16 var popDelegation = delegate(pop, '.soshm-item', 'click', function(e) { 17 var site = e.delegateTarget.dataset.site; 18 pop.style.display = 'none'; 19 setTimeout(function() { 20 shareTo(site, options); 21 }, 50); 22 });
        要想在UC瀏覽器截屏之前關閉遮罩,想法是在點擊具體分享功能后,執行shareTo之前,執行pop.style.display = 'none';關閉遮罩層,實現起來好像很簡單,但是為什么要在加一個setTimeout,延遲50毫米來執行shareTo呢?
        這也是無奈,如果直接使用pop.style.display = 'none';緊跟著執行shareTo(site, options); 你會發現沒有效果,遮罩層還是會被截取到,起初以為是pop元素上有 transition 0.6S過渡的原因,結果使用 pop.parentNode.removeChild(pop)直接刪除pop元素,
        發現也是無效的,這是為什么呢???? 還沒搞明白, 后來只能使用setTimeout進行延遲處理,50毫米即可,還可以更小。。。。 DOM操作為什么不會在shareTo之前完成,有沒大神知道的。。
    23 pop.classList.remove('soshm-pop-hide'); 24 pop.style.display = 'block'; 25 setTimeout(function() { 26 pop.classList.add('soshm-pop-show'); 27 }.bind(this), 0); 28 29 pop.addEventListener('click', function() { 30 pop.classList.remove('soshm-pop-show'); 31 pop.classList.add('soshm-pop-hide'); 32 setTimeout(function() { 33 pop.style.display = 'none'; 34 popDelegation.destroy(); 35 }, 1100); 36 }, false); 37 };

    ?

      問題二:QQ內置瀏覽器中無法使用分享功能,測試就分享到騰訊微博有跳轉(暫定解決辦法:同微信提示右上角菜單分享);

        原因:通過在代碼中添加alert()調試,發現QQ內置瀏覽器打開分享時,運行到了 QQ瀏覽器APP中,使用了QQ瀏覽器APP的接口進行分享就無效了,兩者不知道怎么共通,這些都沒有相關文檔查看,一頭霧水,

        所以,又是一個折中的辦法 判斷如果是QQ內置瀏覽器中,則同微信提示右上角菜單分享;效果如下:

        

    ?    這時候,問題又來了(蛋疼。。。),怎么區分微信、QQ瀏覽器APP、QQ內置瀏覽器這三者呢?三個本來同根生,就是尼瑪非的長得不一樣。。。

        判斷瀏覽器類型最常用的辦法肯定就是 用戶代理(user agent),獲取方式:window.navigator.userAgent,然后你就會獲得一長串比如下方的 安卓中對于三個兄弟的userAgent:

        ??? ? ?   

        之前是通過MicroMessenger 判斷是否是微信中打開,
        通過MQQBrowser判斷 是否是QQ瀏覽器APP中打開,
        但是要判斷是否是QQ內置瀏覽器打開的就有點尷尬了,經過暗中觀察發現一些區別:

          1、微信和QQ內置中代由mobile前綴, 而QQ瀏覽器APP只有MQQBrowser
          2、QQ內置瀏覽器會出現 V1_AND_SQ_6.7.1_YYB_D QQ這些字段;

        

        最后:使用 ?'Mobile MQQBrowser' && ! 'MicroMessenger' ?來判斷QQ內置瀏覽器,由于手上沒什么測試機,暫時在本人安卓上是能正確判斷的,可能對于不同系統、不同版本軟件或存在問題,這個待日后測試;

        滿心歡喜的又以為弄好了QQ內置瀏覽器分享,可是。。。。他喵的,一使用,分享到QQ好友 微信好友等,發現尼瑪 標題、簡介、圖片 什么都沒有,微信中直接一個null,賊尷尬,這也就引發了第三個問題;

    ?

      問題三:QQ內置瀏覽器使用右上角自帶分享功能如何自定義標題圖片鏈接等的問題 ? ? ?

        又他喵的一番苦問,苦找,發現原來要想自定義QQ內置瀏覽器右上角分享需要像微信中分享一樣,載入官方JS,才能進行相應的配置;

        官方鏈接:QQ對外分享組件接口??手機QQ內置網頁,微信內置網頁中進行分享到QQ和微信的操作

        這下終于能好點了吧:

    if (deviceDetect('Mobile MQQBrowser') && !deviceDetect('MicroMessenger')) { //判斷是QQ內置瀏覽器loadScript('http://qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js', function() {setShareInfo({title: '{$goods.goods_name}',summary: '{$goods.goods_name}',pic:"圖片路徑",url: “頁面url”});})}
     //loadScript 用于插入官方js
    function loadScript(url, done) {var script = document.createElement('script');script.src = url;script.onload = onreadystatechange = function() {if (!this.readyState ||this.readyState === 'load' ||this.readyState === 'complete') {done && done();script.onload = onreadystatechangescript.parentNode.removeChild(script);}};document.body.appendChild(script);}

    ?

      問題四:除QQ、UC瀏覽器之外的瀏覽器對于分享至微信好友、微信朋友圈的處理;    

        各種款式各種版本的瀏覽器多不勝數,無法一一對應寫出分享調用,況且也拿不到分享接口(這個最蛋疼,UC和QQ也都是前人留下的不懂哪里查看,哪天要是不爽給改了,那就。。。。),

        所以對于其他類型的瀏覽器處理辦法:

          1、隱藏微信相關的分享;

          2、點擊微信分享,彈窗提示用戶手動使用瀏覽器菜單中的分享功能,現在的手機瀏覽器大都支持分享到微信中;

        綜合考慮,選擇第二種方式比較適合,修改:

    1 // 在普通瀏覽器里點擊微信分享,通過QQ瀏覽器當橋梁喚起微信客戶端 2 // 如果沒有安裝QQ瀏覽器則點擊無反應 3 if (site.indexOf('weixin') !== -1) { 4 layer.open({content:'請使用瀏覽器菜單中分享按鈕,選擇分享至微信', skin:'msg', time:5}); 這里使用了layer插件進行彈窗提示,大家可以根據自己的情況修改;
    5 // var mttbrowserURL = appendToQuerysting(location.href, {__soshmbridge: site}); 6 // openAppByScheme('mttbrowser://url=' + mttbrowserURL);
        上面是原來的代碼,使用的是URL scheme調用QQ瀏覽器APP,但是前提是你安裝了QQ瀏覽器,即使按照了QQ瀏覽器,也只能在QQ瀏覽器中打開該頁面,還是得手動再次點擊分享,個人感覺有點雞肋。。。。
    7 }

    ?

    ?

    一個移動端分享插件,磕磕絆絆,雖然沒有真正的解決所有瀏覽器的分享問題,但也達到了能較好的使用,感謝soshm.js作者 ?https://github.com/calledT/soshm?

      后續繼續改進。。


        

    ?

    ?

    ?

    ?

      

    ?

    轉載于:https://www.cnblogs.com/milo-wjh/p/6796082.html

    總結

    以上是生活随笔為你收集整理的移动端分享插件使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美一区自拍 | 日韩欧美在线免费观看 | 99热一区二区三区 | 国产精品一二三四五 | 免费一区 | 久久久全国免费视频 | 精品久久久一区 | 中文字幕一区二区三区人妻在线视频 | 91视频一区二区三区 | 精品美女久久 | 男生和女生一起差差差很痛的视频 | 国产成人看片 | 亚洲欧美乱综合图片区小说区 | 亚洲第一天堂影院 | 亚洲AV成人无码电影在线观看 | 国语对白av| 熟妇人妻精品一区二区三区视频 | 香蕉视频在线网址 | 又黄又爽又刺激的视频 | 国产精品一二区在线观看 | 亚洲美女久久久 | 老熟妇高潮一区二区三区 | 6080午夜伦理| 亚洲第一二三四区 | 一级片视频网站 | 久久激情视频 | 亚洲草逼 | 98久久| 久久久久久久久久久久电影 | www夜夜操 | 香蕉久久精品日日躁夜夜躁 | 贝利弗山的秘密在线观看 | 四虎影视黄色 | 精品国产一区二区三区av性色 | 深夜福利院 | 色播在线视频 | mm1313亚洲精品 | 男人添女人下部高潮全视频 | 中国美女黄色一级片 | 少妇h视频| √天堂 | 337p粉嫩色噜噜噜大肥臀 | 美女少妇av | 国产一区亚洲一区 | 久热精品视频在线观看 | 自拍一级片 | 丰满雪白极品少妇流白浆 | 亚洲激情免费视频 | 免费吃奶摸下激烈视频 | 最新av网址在线观看 | 高h奶汁双性受1v1 | jizz欧洲| 在线观看视频中文字幕 | 欧美在线视频二区 | 亚洲免费一区二区 | 中文字幕一区二区三区波野结 | 午夜国产一区 | 欧美大片一区二区三区 | 国产人妖一区 | av超碰在线观看 | 久久久999| 国产精品久久久久久亚洲毛片 | 中文字幕综合网 | mm131美女视频 | 国产精品第八页 | 九七av| 国产欧美一区二区三区在线看蜜臂 | 久久911| 91视频导航 | 欧美激情va永久在线播放 | 国产精品久久久午夜夜伦鲁鲁 | 国产卡一卡二卡三无线乱码新区 | 欧美一区二区三区在线观看视频 | 国产视频aaa| 蜜桃成熟时李丽珍在线观看 | 影音先锋三级 | 视频在线中文字幕 | 99re在线观看 | 影音先锋日韩资源 | 久久精品视频在线观看 | 大尺度av在线 | 寂寞少妇让水电工爽hd | 亚洲激情啪啪 | 成人av手机在线观看 | 亚洲免费视频一区二区三区 | 中文字幕一区二区在线播放 | 欧美成年视频 | 国产视频首页 | 欧美日韩在线不卡 | 毛片网站免费 | 88av网站 | 欧美成人精品欧美一级乱 | 欧美性猛交ⅹxx | 欧美精品成人一区二区三区四区 | 国产欧美一区二区精品久久久 | 国产麻豆一区二区三区在线观看 | 欧美黄色免费在线观看 | 91精品国产一区二区三区 | 综合网五月天 |