在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:
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
更新
过去,我们还可以对MediaStream对象使用createObjectURL()方法。这种用法已经被规范和浏览器抛弃了。
如果你需要设置一个MediaStream作为HTMLMediaElement的源,只需将MediaStream对象直接附加到HTMLMediaElement的srcObject属性上,例如<video>元素。
const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;
然而,如果你需要使用MediaSource, Blob或File,你仍然需要使用URL. createobjecturl()创建一个Blob:// URL,并将其分配给HTMLMediaElement.src。
更多详情请点击:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
我的代码被破坏了,因为我使用了一种过时的技术。以前是这样的:
video.src = window.URL.createObjectURL(localMediaStream);
video.play();
然后我把它换成了这个:
video.srcObject = localMediaStream;
video.play();
效果很好。
编辑:最近localMediaStream已弃用并被MediaStream取代。最新的代码是这样的:
video.srcObject = new MediaStream();
引用:
已弃用的技术:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
现已弃用的技术:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
现代技术:https://developer.mozilla.org/en-US/docs/Web/API/MediaStream
如果你正在使用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);
}
});