關(guān)鍵字 | 釋義 |
---|---|
anonymous | 元素的跨域資源請(qǐng)求不需要憑證標(biāo)志設(shè)置。 |
use-credentials | 元素的跨域資源請(qǐng)求需要憑證標(biāo)志設(shè)置,意味著該請(qǐng)求需要提供憑證。 |
其中,只要crossOrigin的屬性值不是use-credentials,全部都會(huì)解析為anonymous,包括空字符串,包括類似'abc'這樣的字符。
例如:
img.crossOrigin = 'abc'; console.log(img.crossOrigin); // 結(jié)果是'anonymous'
另外還有一點(diǎn)需要注意,那就是雖然沒有crossOrigin屬性,和設(shè)置crossOrigin="use-credentials"在默認(rèn)情況下都會(huì)報(bào)跨域出錯(cuò),但是性質(zhì)上卻不一樣,兩者有較大區(qū)別。
crossOrigin兼容性
IE11+(IE Edge),Safari,Chrome,F(xiàn)irefox瀏覽器均支持,IE9和IE10會(huì)報(bào)SecurityError安全錯(cuò)誤,如下截圖:
四、crossOrigin屬性為什么可以解決資源跨域問題?
crossOrigin=anonymous相對(duì)于告訴對(duì)方服務(wù)器,你不需要帶任何非匿名信息過來。例如cookie,因此,當(dāng)前瀏覽器肯定是安全的。
就好比你要去別人家里拿一件衣服,crossOrigin=anonymous相對(duì)于告訴對(duì)方,我只要衣服,其他都不要。如果不說,可能對(duì)方在衣服里放個(gè)竊聽器什么的,就不安全了,瀏覽器就會(huì)阻止。
五、IE10瀏覽器不支持crossOrigin怎么辦?
我們請(qǐng)求圖片的時(shí)候,不是直接通過new Image(),而是借助ajax和URL.createObjectURL()方法曲線救國(guó)。
代碼如下:
var xhr = new XMLHttpRequest(); xhr.onload = function () { var url = URL.createObjectURL(this.response); var img = new Image(); img.onload = function () { // 此時(shí)你就可以使用canvas對(duì)img為所欲為了 // ... code ... // 圖片用完后記得釋放內(nèi)存 URL.revokeObjectURL(url); }; img.src = url; }; xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.send();
此方法不僅IE10瀏覽器OK,原本支持crossOrigin的諸位瀏覽器也是支持的。
也就多走一個(gè)ajax請(qǐng)求,還可以!
根據(jù),根據(jù)實(shí)踐發(fā)現(xiàn),在IE瀏覽器下,如果請(qǐng)求的圖片過大,幾千像素那種,圖片會(huì)加載失敗,我猜是超過了blob尺寸限制。
六、結(jié)束語
最近工作中學(xué)到的一點(diǎn)小經(jīng)驗(yàn),希望可以幫到遇到類似問題的小伙伴。也希望大家多多支持腳本之家。
標(biāo)簽:萍鄉(xiāng) 盤錦 中山 阿壩 金昌 赤峰 綏化 聊城
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何解決canvas圖片getImageData,toDataURL跨域問題》,本文關(guān)鍵詞 詳解,如何,解決,canvas,圖片,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。