遇到的問題,繪制海報,使用本地圖片,ios端表現(xiàn)良好;使用靜態(tài)資源站(跨域圖),ios端點擊生成海報無反應,報DOMEXCEPTION錯誤,
開始排查錯誤,發(fā)現(xiàn)在使用canvas.toDataURL('image/png');報錯,但原因未明。經過百度數(shù)次,查看許多別人的筆記,找到幾個關鍵點,
1.設置圖片跨域屬性:img.crossOrigin?=?'Anonymous' ;
2.img.src在圖片跨域屬性之后賦值;
由于本人圖片是進入頁面就加載完成,起初,我只在img標簽上加上了跨域屬性,并沒有在canvas繪制事件里做其他處理,導致,結果跟原先一樣,報錯,無反應

感覺到了惡意,好像不太聰明,喪;但是強迫癥使我堅強,繼續(xù)解決;
又看了幾篇別人的文字,我在canvas繪制事件里,我又獲取了該圖的dom,重新給其加上跨域屬性,就是上述的第一條,緊接著,重新賦值圖片的src,我也沒懂這其中的操作是怎么回事,明明進入頁面src就有了,跨域屬性也有了,但是這里如果不設置,或者兩個只設置其中一個,都不行,具體會出現(xiàn)的不良反應,有興趣自己試試,我這不截圖了;而且經過多篇文章的熏陶,這個兩個還是有前后順序,先跨域屬性,后src,這樣設置之后,我以為成功了,但是借了同事ios,發(fā)現(xiàn)其中那種跨域的圖是空白的,而海報上一些本地圖是顯示的,再次吐血;后面發(fā)現(xiàn)ios 存在img.onload完成后繪制的獨特,其實我也不知道,安卓需不需要,但是之前知識的空白,沒有讓我做到這樣,也在安卓上良好,所以,再次給加上,onload,在里面,繪制,不過這個地方,我還踩了坑,可能是我對這些事件不熟悉,寫的方法有問題,

上圖的寫法,在ios中表現(xiàn)打印那句話,卻沒有進行下面的,其實我也沒驗證,第二執(zhí)行了沒,但是最后一句是沒有的,因為海報沒出現(xiàn),生成沒反應啊,吐血,沒有任何報錯,所以我把懷疑的目光投向了這個onload事件,最后又找了一個vue中img的onload寫法,就是下面這張圖

是的,一樣的操作,不一樣的用法,我卻不知道為什么,只能麻木的去使用,經過測試可以用的,一萬點暴擊,書到用時方恨少?還是原地爆炸吧。
然后它帶著我友好的體驗了一下,iOS無毛病的展示了生成海報的操作,可是我那同事手殘啊,竟然關閉海報,還多來了幾次,再次發(fā)現(xiàn)了問題,只有第一次能生成,這又是哪里出了問題?????
第一次能成功,說明代碼沒毛病,既然是img加載完了能繪制導出圖片,那第二次理論上也可以,看下打印結果是沒走進onload,是情況還沒到位,說明第二次走了其他的事件,首先想到的是,已加載跟失敗,但我先試了失敗,因為失敗太多次了,想把成功留到最后,失敗是沒打印,那只能是用加載完成了,可我又不會寫了,害怕,寫了又像上面的onload,就是不執(zhí)行canvas的,所以我又去百度,

就是那個if里的判斷,用了來看圖片是不是已經加載了,而且,我看到那個文章里,作者考慮了,除了ios外,其他的會再執(zhí)行onload,所以,需要這個if里,返回return,用來結束,用了iOS試了,果然,它在第二生成,走進了這個事件,激動,經過多次測試,確實,iOS,能正常生成了,不會出現(xiàn),無反應報錯,無反應不報錯,有反應跨域圖空白,第一次能生成,后面無反應不報錯,這些諸多情況.
問題總結(ios端的表現(xiàn)):
1.canvas事件不寫跨域圖的跨圖屬性,及重置src,或者順序問題,出現(xiàn)無反應報錯
2.canvas事件寫了第一條,但沒寫onload,導致海報能生成跨域圖空白,onload寫法有問題無反應不報錯
3.canvas事件寫了第1,2兩條,但是沒寫圖片已加載事件判斷,導致只有第一次能生成海報,后面無反應不報錯
鑒于我知識點都是百度查看,所以文章只是參考功能,能給遇上問題的人帶來點突發(fā)奇想,以此解決問題就行,至于文中的盲點,如果有道友知道,可以評論講解,感謝!