Trong các trình duyệt hỗ trợ các yêu cầu crossOrigin, (mà nên được ưa thích những người thân), nếu bạn đặt crossOrigin
-'anonymous'
, và cố gắng thiết lập src
phần tử của bạn trỏ đến một tập tin lưu trữ trên một máy chủ không đúng thiết lập, các load
sự kiện sẽ không kích hoạt và thay vào đó, sự kiện error
sẽ diễn ra. Điều quan trọng là phải hiểu rằng trong trường hợp yêu cầu crossOrigin thất bại, máy chủ sẽ trả lời trực tiếp rằng nó không chấp nhận yêu cầu, vì vậy chỉ các tiêu đề được gửi giữa người dùng và máy chủ ở xa, trong khi thực hiện cách xung quanh (đầu tiên thử mà không có yêu cầu crossOrigin, sau đó thử với), bạn phải tải xuống hoàn toàn * tài nguyên, sau đó tải xuống lại với tập hợp thuộc tính chéo ...
Tương tự áp dụng cho âm thanh, video và xhr yêu cầu.
Vì vậy, trước tiên, bạn nên đặt crossOrigin của các yêu cầu gốc xuất phát, sau đó nếu nó không thành công, nghĩa là mặt khác không được định cấu hình đúng cách.
var img = new Image();
if('crossOrigin' in img){
// an up to date browser
// make a single crossOrigin request
img.crossOrigin = 'anonymous';
img.onerror = handleCORSFailure;
}
else{
// for browser that don't support the crossOrigin request
var ctx = document.createElement('canvas').getContext('2d');
ctx.width = ctx.height = 1; // no need to use too much memory, 1*1 px is enough
img.addEventListener('load', function(){
ctx.drawImage(this,0,0);
try{
ctx.getImageData(0,0,1,1);
}
catch(e){
handleCORSFailure(e);
return;
}
});
}
img.src = 'https://i.stack.imgur.com/Kt3vI.png?s=48&g=1';
function handleCORSFailure(e){
if(e.target){
console.log('server not set correctly');
}
else{
console.log("browser doesn't support crossOrigin requests");
}
}
- * Trên thực tế, hình ảnh chỉ cần được tải về hoàn toàn, tất cả các nguồn lực khác có thể được kiểm tra trước khi kết thúc.
Ps: trong trường hợp có cùng yêu cầu gốc, thuộc tính crossOrigin không bị tổn thương, vì vậy, kiểm tra này vẫn có thể được thực hiện.
Bạn có thể tải hình ảnh có nguồn gốc chéo, bạn không thể đọc pixel của chúng. Vì vậy, một lỗi cors sẽ không bao giờ xảy ra trong quá trình tải img. –
Vì vậy, về bản chất cors xảy ra sau khi tải hình ảnh? Làm thế nào để tôi phát hiện cors sau khi img tải chúng? : $ Tôi cần phân biệt giữa tải xuống cors & img do url xấu –
@DebanjanDhar - để làm rõ, bạn muốn kiểm tra xem hình ảnh bạn tải CÓ THỂ được "thao tác" không chỉ là tài nguyên được hiển thị trong '' hoặc '