關于canvas在ios端的不良表現(xiàn)

遇到的問題,繪制海報,使用本地圖片,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寫法,就是下面這張圖

它體現(xiàn)了我的無能

是的,一樣的操作,不一樣的用法,我卻不知道為什么,只能麻木的去使用,經過測試可以用的,一萬點暴擊,書到用時方恨少?還是原地爆炸吧。

然后它帶著我友好的體驗了一下,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ā)奇想,以此解決問題就行,至于文中的盲點,如果有道友知道,可以評論講解,感謝!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 最近工作中碰到一個需求,實現(xiàn)一個自定義的二維碼 背景是一張自定義的圖片 二維碼居中展示 在微信里長按可識別 類似于...
    pengtoxen閱讀 1,144評論 0 0
  • 本文適用人群 需要在微信wap頁開發(fā)分享海報功能的前端程序員們 想要了解html2canvas庫的吃瓜群眾 掙扎在...
    朝顏vivian閱讀 10,362評論 4 17
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,690評論 1 11
  • 調整自己 昨晚上就自己的身體不舒服進行了約練,隨著咨詢師的陪伴,傾聽,反饋,賦能,我漸漸地明白,工作上不能太強大了...
    北方人_4bf2閱讀 232評論 0 1
  • 現(xiàn)在,憨已經做不到像初中高中那樣早睡早起了,當然,可能還有很多人從初中高中開始就不能早睡早起了。 那些亮亮的屏幕,...
    StarboyHan閱讀 197評論 0 0

友情鏈接更多精彩內容