Không thể thực thi 'createdObjectURL' trên 'URL':


132

Hiển thị lỗi bên dưới trong Safari.

Không thể thực thi 'createObjectURL' trên 'URL': Không tìm thấy chức năng nào khớp với chữ ký được cung cấp.

Mã của tôi là:

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

Đây là Mã của tôi cho hình ảnh:

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); 
            }
       }           
   } 
} 

6
Xin chào Hardik, bạn đang chuyển sang createObjectURL(...)chức năng gì khi gặp lỗi đó?
Arthur Weborg

2
đối tượng phải là một đối tượng tập tin hay một đối tượng Blob để tạo ra một đối tượng URL for.see devdocs.io/dom/window.url.createobjecturl
yxf

1
Đây là Mã của tôi cho hình ảnh: function myUploadOnChangeFunction () {if (this.files.length) {for (var i in this.files) {if (this.files.hasOwnProperty (i)) {var src = createdObjectURL (this. tập tin [i]); hình ảnh var = hình ảnh mới (); hình ảnh.src = src; fantSRC = src; $ ('# img'). attr ('src', src); }}}}
Hardik Mandankaa

@HardikMansaraa Hãy tiếp tục và chỉnh sửa câu hỏi đó.
soktinpk

window.URL.createObjectURL('broken')ném một lỗi:Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
Juan Mendes

Câu trả lời:


150

CẬP NHẬT

Xem xét tránh createObjectURL()phương pháp, trong khi các trình duyệt đang vô hiệu hóa hỗ trợ cho nó. Chỉ cần đính kèm MediaStreamđối tượng trực tiếp vào thuộc srcObjecttính của phần tử HTMLMediaElementeg <video>.

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

Tuy nhiên, nếu bạn cần làm việc với MediaSource, Blobhoặc File, bạn phải tạo một URL URL.createObjectURL()và gán nó cho HTMLMediaElement.src.

Đọc thêm chi tiết tại đây: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaEuity/srcObject


Trả lời cũ hơn

Tôi gặp lỗi tương tự, khi tôi chuyển sang createObjectURLdữ liệu thô:

window.URL.createObjectURL(data)

Nó phải là Blob, Filehoặc MediaSourceđối tượng, không phải dữ liệu chính nó. Điều này làm việc cho tôi:

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

Kiểm tra MDN để biết thêm thông tin: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL


2
Xin chào .. Phải làm gì nếu tôi đang xử lý "application / pdf"? Tôi đang gặp lỗi tương tự trên bảng điều khiển khi tôi xử lý tệp PDF
N Sharma

@mimo Tôi đang sử dụng cùng một mã để tải tập tin. Nhưng hai tập tin đang được tải xuống. Một là tệp chính xác và một tệp bổ sung có cùng tên nhưng trạng thái không thành công đang được tải xuống. Bạn có biết tại sao nó lại xảy ra không?
Shardul

Tôi bối rối với nhận xét này, trong MDN, nó không khuyến khích việc sử dụng URL.createObjectURL()cho các luồng phương tiện truyền thông. Tuy nhiên, trạng thái KHÔNG sử dụng nó cho đầu vào tệp như đã nêu trong câu hỏi ban đầu.
alextrastero

140

Lỗi này là do chức năng createObjectURLkhông được dùng cho Google Chrome

Tôi đã thay đổi điều này:

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

đến đây:

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

Điều này làm việc cho tôi.


+1 Xem ví dụ với nhà phát triển
phòng.mozilla.org/en

createdObjectURL không bị phản đối như hiển thị ở đây nhưng không còn chấp nhận đối tượng truyền phát phương tiện
goodies4uall 27/07/19

Đây nên là câu trả lời.
DomingoR

có một vấn đề khác video.play () dường như bị hạn chế: DOMException: play () chỉ có thể được bắt đầu bằng cử chỉ của người dùng.
dùng889030

@ user889030 chỉ có nghĩa là bạn không thể mở một trang web và mong đợi luồng webcam bắt đầu. Bạn phải để người dùng bắt đầu truyền phát một cách rõ ràng. Chỉ cần sử dụng một nút để bắt đầu truyền phát
S.Ramjit

26

Mã của tôi đã bị hỏng vì tôi đang sử dụng một kỹ thuật không dùng nữa. Nó đã từng là thế này:

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

Sau đó, tôi đã thay thế bằng điều này:

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

Điều đó đã làm việc rất đẹp.

EDIT: Gần đây localMediaStreamđã bị phản đối và thay thế bằng MediaStream. Mã mới nhất trông như thế này:

video.srcObject = MediaStream;

Người giới thiệu:

  1. Kỹ thuật không dùng nữa: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. Kỹ thuật không dùng hiện đại: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaEuity/srcObject
  3. Kỹ thuật hiện đại: https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

9

Tôi đã có cùng một lỗi cho MediaStream. Giải pháp được đặt một luồng đến srcObject.

Từ các tài liệu :

Quan trọng: Nếu bạn vẫn có mã dựa trên createdObjectURL () để đính kèm các luồng vào các thành phần phương tiện, bạn cần cập nhật mã của mình để chỉ cần đặt srcObject trực tiếp lên MediaStream.



3

Vấn đề là các khóa được cung cấp trong vòng lặp không tham chiếu đến chỉ mục của tệp.

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

Đầu ra của đoạn mã trên là:

0
length
item

Nhưng những gì đã được mong đợi là:

0
1
2
etc...

Sau đó, lỗi xảy ra khi trình duyệt cố gắng thực thi, ví dụ:

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

Tôi đề nghị thực hiện dựa trên mã sau đây:

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

Tôi hy vọng điều này có thể giúp đỡ một ai đó.

Lời chào hỏi!


1

Nếu bạn đang sử dụng ajax, có thể thêm các tùy chọn xhrFields: { responseType: 'blob' }:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.