微信JSSDK分享的一些坑

最近做微信方面的H5應(yīng)用比較多,很多情況下需要定制頁面的分享內(nèi)容,例如標題、描述、分享的圖片等,這時候就需要用到微信的JSSDK。
在開發(fā)的過程中遇到了一些不大不小的坑,今天在下面總結(jié)一下,以備將來之需。
坑一:朋友圈鏈接不刷新



最近做了一個需要動態(tài)改變分享圖片的項目,A和B處于關(guān)注狀態(tài),當A把項目分享到朋友圈后,B從朋友圈中打開鏈接,并再次執(zhí)行頁面程序,當再次分享到朋友圈時,發(fā)現(xiàn)分享出去的圖片仍是A分享出去的圖片。

最開始是以為代碼的問題,但是經(jīng)過調(diào)試,排除了代碼bug。
然后考慮可能是分享機制問題,遂除了用jssdk方式分享外,還加入了jsBridge方式,但是問題仍沒有解決。

接著想到也許是服務(wù)器緩存造成的,但發(fā)現(xiàn)程序執(zhí)行后的結(jié)果每次都是新的,所以排除了這種情況。

后來考慮是APP緩存的問題,一度因此打算改變項目策略,但發(fā)現(xiàn)類似的一個項目卻沒有出現(xiàn)這個問題,而且發(fā)現(xiàn)每次程序執(zhí)行完后分享給朋友時圖片是新的,只有從朋友圈里打開的鏈接不能讓程序結(jié)果更新。

最后想到可能是頁面沒有刷新,所以給分享鏈接加了隨機查詢參數(shù),以強制刷新。沒料到,還真是!

所以如果你的項目中需要動態(tài)地改變分享出去的內(nèi)容,最好在分享URL后面加入隨機查詢參數(shù),這樣在朋友圈里的鏈接地址都會不一樣,不同的人打開同一個鏈接會強制刷新。

坑二:分享png圖片黑底


還是上面那個例子,當程序生成png圖片后預(yù)覽時是沒有問題的,但分享出去后只能看到一張黑色的圖。

看到這個現(xiàn)象,馬上想到可能是png圖片不被微信支持。
但是轉(zhuǎn)而就否定了這個觀點,微信的瀏覽器再差也不可能不支持png圖片吧!
于是想到可能是微信自動把png圖片轉(zhuǎn)了其他格式,至于什么格式,不知道。如果真是這樣,那就無解了。

接著想也許是圖片合成的原因,遂測試了幾張不同背景和前景的圖片,發(fā)現(xiàn):如果背景是透明的,前景字體是紅色的,則合成后的圖片分享后能看到黑底紅字;如果背景是白色,前景是紅色,則分享后能看到白底紅字。

所以能得出結(jié)論:如果微信分享出去的圖片是透明背景png圖片,則會看到黑底;如果是不透明的則不會看到黑底。
這樣我只要生成不透明的背景的圖片就行了,測試了幾下,問題解決。

坑三:canvas跨域


其實這不能算是微信的坑,而是canvas的坑。因為在這個項目中出現(xiàn)了,一并提一下。
還是接著上面的坑說,為生成不透明的png圖片,我選擇預(yù)先給canvas寫入圖像。
首先我們定義一個函數(shù):

/**
* @param _src 要載入的圖像地址
* @param _canvasContext canvasContext對象
* @param _scale 要寫入的尺寸數(shù)組[width,height]
*/
function loadImg2Canvas(_src,_canvasContext,_scale){
    var img = new Image();  
    img.src = _src; 
    if(img.complete){
        _canvasContext.drawImage(img, 0, 0,_scale[0],_scale[1]);
    }else{
        img.onload = function(){
            _canvasContext.drawImage(img, 0, 0,_scale[0],_scale[1]);
        };
        img.onerror = function(){
            window.alert('load failed');
        };
    }
}

然后我們給canvas對象載入圖像地址:

var canvas  = document.getElementById("thecanvas");
var canvas_bg = "http://www.example.com/canvas_bg.jpg";
loadImg2Canvas(canvas_bg,ctx,[canvas.width,canvas.height]);

但是這個過程中出現(xiàn)了跨域錯誤:

canvas跨域錯誤

從網(wǎng)上查找,很多文章會建議你給圖片所在的域的響應(yīng)頭中附加上 Access-Control-Allow-Origin: * 字段,并且給要加載的圖像加上img.crossOrigin = "",或img.crossOrigin = "anonymous",于是我們的函數(shù)就變成了:

/**
* @param _src 要載入的圖像地址
* @param _canvasContext canvasContext對象
* @param _scale 要寫入的尺寸數(shù)組[width,height]
*/
function loadImg2Canvas(_src,_canvasContext,_scale){
    var img = new Image();  
    img.src = _src; 
    img.crossOrigin = '';
    if(img.complete){
        _canvasContext.drawImage(img, 0, 0,_scale[0],_scale[1]);
    }else{
        img.onload = function(){
            _canvasContext.drawImage(img, 0, 0,_scale[0],_scale[1]);
        };
        img.onerror = function(){
            window.alert('load failed');
        };
    }
}

但是問題來了,很多情況下我們要加載的圖片是從資源庫或者CDN來的,這些圖片服務(wù)器可能無法加上Access-Control-Allow-Origin: * 字段,所以這種情況下就無能為力了。

最終我只能把圖像跟代碼放到同一個域上,這樣就不存在跨域的問題了。

期待有其他可能的解決辦法!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

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