canvas
跨域如何解決?這裡記錄下使用canvas
繪圖過程中所遇到的跨域問題和解決方案。
先來看下實現方法。
目標一般是由 + 文字 構成。無論是千奇百怪的大小,還是變幻莫測的各式文字,都能用canvas
apidrawimage
和filltext
方法來完成。
基本流程如下:
獲取canvas
上下文 --ctx
const canvas = document.queryselector(selector)
const ctx = canvas.getcontext('2d')
繪圖忽略上的內容,直接用drawimage
將其畫到canvas
畫布上即可。
const image = new image()
image.src = src
image.onload = () =>
drawimage
有3種引數使用方式,具體用法可以檢視 mdn 文件。
獲取影象資料
呼叫htmlcanvaselement
dom 物件提供的toblob()
,todataurl()
或getimagedata()
方法,即可。
canvas.toblob(blob => , mimetype, encoderoptions)
這裡的mimetype
預設值為image/png
。encoderoptions
指定了質量,可用於壓縮,不過需要mimetype
格式為image/jpeg
或者image/webp
。
正常情況下,如果需要將繪製好的影象輸出,我們可以呼叫canvas
的toblob()
,todataurl()
或getimagedata()
方法來獲取到影象資料。然而,遇到跨域的情況就有些尷尬了。可能回報如下錯誤:
failed to execute 'toblob' on 'htmlcanvaselement': tainted canvases may not be exported.
或者
access to image at '' from origin '' has been blocked by cors policy: no 'access-control-allow-origin' header is present on the requested resource.
先來看看第2種情況。
接下來,我們來解決第1種情況。
如此,你便可以拿到資料了。如果沒招,換同域資源吧~
跨域處理實踐
問題1 本地開發環境想通過 ajax 獲取測試環境的資料,因為本地和開發網域名稱不一樣,受到同源策略限制,不能獲取測試環境資料。解決 在php的控制器中加上header access control allow origin 可以拿到測試環境資料。ok。問題2 請求不同資源下的資源。解決 使用jso...
跨域實踐之jsonp實現跨域
jsonp實現跨域是一種十分普遍的方法,它利用的是script標籤裡的src屬性可以跨域請求的功能來實現跨域,那這篇部落格就來實踐一下jsonp這種方法 既然要跨域,那我們先來看下不用jsonp,直接請求的結果 很顯然,由於瀏覽器的同源策略,響應被阻擋了,以至於我們無法獲取到服務端傳來的資料 接下來...
跨域踩坑經驗總結(內涵 跨域知識科普)
跨域問題是我們非常常見的問題,尤其在跨系統頁面間的呼叫經常會遇到,解決的方式在網上一搜一大把,這裡整理出我遇到跨域問題解決的方式以及思路,如何安全的解決跨域呼叫請繼續往下看。什麼是cross origin resource sharing?跨域請求存在的原因 由於瀏覽器的同源策略,即屬於不同域的頁面...