Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未能执行';createObjectURL';在';URL';:_Javascript_Createobject - Fatal编程技术网

Javascript 未能执行';createObjectURL';在';URL';:

Javascript 未能执行';createObjectURL';在';URL';:,javascript,createobject,Javascript,Createobject,在Safari中显示以下错误 未能对“URL”执行“createObjectURL”:未找到与提供的签名匹配的函数 我的代码是: function createObjectURL(object) { return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object); } 这是我的图像代码: function myUploadOnChangeFunctio

在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
文件
MediaSource
对象,而不是数据本身。这对我很有用:

var binaryData = [];
binaryData.push(data);
window.URL.createObjectURL(new Blob(binaryData, {type: "application/zip"}))
有关更多信息,请查看MDN:


更新

回到过去,我们还可以对MediaStream对象使用
createObjectURL()
方法。规范和浏览器已不再使用此功能。
如果需要将MediaStream设置为HtmlMedia元素的源,只需将
MediaStream
对象直接附加到HtmlMedia元素的
srcObject
属性,例如
元素

const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;
但是,如果您需要使用
MediaSource
Blob
文件
,您仍然需要使用
URL.createObjectURL()
创建
Blob://
URL并将其分配给
HTMLMediaElement.src


阅读此处的更多详细信息:

问题在于循环中提供的键没有引用文件的索引

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);
    ...
}
var files=this.files;
对于(var i=0;i
我希望这能帮助别人


你好

对于MediaStream,我也有同样的错误。将解决方案设置为SRC对象的流

从:

重要提示:如果仍然有依赖createObjectURL()的代码 将流附加到媒体元素时,需要将代码更新到 只需直接将srcObject设置为MediaStream


导致此错误的原因是Google Chrome不推荐使用函数
createObjectURL

我改变了这一点:

video.src=vendorUrl.createObjectURL(stream);
video.play();
为此:

video.srcObject=stream;
video.play();
这对我来说很有效。

带后退功能的视频:

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

我从GgitHub下载了最新版本后修复了它

我的代码被破坏了,因为我使用了一种不推荐使用的技术。过去是这样的:

video.src = window.URL.createObjectURL(localMediaStream);
video.play();
然后,我将其替换为:

video.srcObject = localMediaStream;
video.play();
这很有效

编辑:最近,
localMediaStream
已被弃用并替换为
MediaStream
。最新代码如下所示:

video.srcObject = new 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);
      }
    });
    

    如果您正在使用angular,本教程将非常有用:。但是,您需要更换该行:

    this.video.src = window.URL.createObjectURL(stream);
    
    由于createObjectURL()在chrome for MediaStream上已被弃用,因此使用此选项

    this.video.srcObject = stream;
    

    您好,Hardik,当您收到该错误时,您将向您的
    createObjectURL(…)
    函数传递什么?对象必须是文件对象或Blob对象才能为其创建对象URL。请参阅这是我的图像代码:函数myUploadOnChangeFunction(){if(This.files.length){for(this.files中的var i){if(this.files.hasOwnProperty(i)){var src=createObjectURL(this.files[i]);var image=new image();image.src=src;imagSRC=src;$('#img').attr('src',src);}}}@HardikMansaraa继续,在您的问题中编辑它。
    window.URL.createObjectURL('breaked')
    抛出一个错误:
    Uncaught TypeError:未能对“URL”执行“createObjectURL”:找不到与提供的签名匹配的函数。
    Hi..如果我正在处理该怎么办“申请表/pdf"?在处理PDF时,我在控制台上遇到相同的错误file@mimo我正在使用相同的代码下载文件。但有两个文件正在下载。一个是正确的文件,另一个是同名但状态失败的额外文件正在下载。你知道为什么会发生这种情况吗?我对这条评论感到困惑,在MDN中,它不鼓励对媒体流使用
    URL.createObjectURL()
    。但是,它没有声明不将其用于初始问题中所述的文件输入。+1请参阅具有回退功能的示例createObjectURL没有如图所示被弃用,但不再接受媒体流对象这应该是答案。还有一个问题video.play()似乎受到限制:DomeException:play()只能由用户手势启动。@user889030这意味着您无法打开网页并期望网络摄像头流启动。您必须让用户显式启动流。只需使用按钮启动流即可