[javascript] ‘URL’에서 ‘createObjectURL’을 (를) 실행하지 못했습니다.

Safari에서 아래 오류가 표시됩니다.

‘URL’에서 ‘createObjectURL’을 (를) 실행하지 못했습니다. 제공된 서명과 일치하는 기능이 없습니다.

내 코드는 다음과 같습니다

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}

이것은 내 이미지 코드입니다.

function myUploadOnChangeFunction() {
    if (this.files.length) {
       for (var i in this.files) {
           if (this.files.hasOwnProperty(i)) {
              var src = createObjectURL(this.files[i]);
              var image = new Image();
              image.src = src;
              imagSRC = src;
              $('#img').attr('src', src);
            }
       }
   }
} 



답변

최신 정보

createObjectURL()브라우저가 메소드를 지원하지 않는 동안 메소드를 피 하십시오. 예를 들어 element MediaStreamsrcObject속성에 직접 객체를 연결하십시오 .HTMLMediaElement<video>

const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;

그러나, 당신은 작업에 필요한 경우 MediaSource, Blob또는 File당신이있는 URL을 생성해야합니다, URL.createObjectURL()그리고에 할당합니다 HTMLMediaElement.src.

자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject를 참조하십시오.


이전 답변

createObjectURL원시 데이터를 전달할 때 동일한 오류가 발생했습니다 .

window.URL.createObjectURL(data)

그것은이어야한다 Blob, File또는 MediaSource객체가 아닌 데이터 자체. 이것은 나를 위해 일했다 :

var binaryData = [];
binaryData.push(data);
window.URL.createObjectURL(new Blob(binaryData, {type: "application/zip"}))

자세한 내용은 MDN을 확인하십시오. https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL


답변

이 오류는 createObjectURLChrome 에서 기능 이 더 이상 사용되지 않기 때문에 발생합니다.

나는 이것을 바꿨다.

video.src=vendorUrl.createObjectURL(stream);
video.play();

이에:

video.srcObject=stream;
video.play();

이것은 나를 위해 일했습니다.


답변

더 이상 사용되지 않는 기술을 사용했기 때문에 코드가 손상되었습니다. 예전에는

video.src = window.URL.createObjectURL(localMediaStream);
video.play();

그런 다음 이것을 이것을 대체했습니다 :

video.srcObject = localMediaStream;
video.play();

그것은 아름답게 작동했습니다.

편집 : 최근 localMediaStream에 더 이상 사용되지 않으며로 대체되었습니다 MediaStream. 최신 코드는 다음과 같습니다.

video.srcObject = MediaStream;

참고 문헌 :

  1. 더 이상 사용되지 않는 기술 : https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. 더 이상 사용되지 않는 최신 기술 : https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
  3. 현대 기술 : https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

답변

MediaStream에 대해 동일한 오류가 발생했습니다. 솔루션은 스트림을 srcObject로 설정합니다.

로부터 문서 :

중요 사항 : 미디어 요소에 스트림을 첨부하기 위해 createObjectURL ()에 의존하는 코드가 여전히 있으면 코드를 업데이트하여 srcObject를 MediaStream에 직접 설정하십시오.


답변

대체 동영상 :

try {
  video.srcObject = mediaSource;
} catch (error) {
  video.src = URL.createObjectURL(mediaSource);
}
video.play();

보낸 사람 :
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject


답변

문제는 루프에 제공된 키가 파일의 인덱스를 참조하지 않는다는 것입니다.

for (var i in this.files) {
    console.log(i);
}

위 코드의 출력은 다음과 같습니다.

0
length
item

그러나 예상했던 것은 :

0
1
2
etc...

그런 다음 브라우저가 실행하려고 할 때 오류가 발생합니다 (예 :

window.URL.createObjectURL(this.files["length"])

다음 코드를 기반으로 구현을 제안합니다.

var files = this.files;
for (var i = 0; i < files.length; i++) {
    var file = files[i],
        src = (window.URL || window.webkitURL).createObjectURL(file);
    ...
}

이것이 누군가를 도울 수 있기를 바랍니다.

인사말!


답변

ajax를 사용하는 경우 옵션을 추가 할 수 있습니다 xhrFields: { responseType: 'blob' }.

$.ajax({
  url: 'yourURL',
  type: 'POST',
  data: yourData,
  xhrFields: { responseType: 'blob' },
  success: function (data, textStatus, jqXHR) {
    let src = window.URL.createObjectURL(data);
  }
});