我如何 link 将文件输入到对象嵌入的源

How would I link a File Input to a source of an Object Embed

我如何 link 任何媒体文件(swfs/mp4/mp3/png/other 媒体嵌入文件)到我的对象嵌入源: 基本上我想要这个:

<input type="file"></input>

发送上传的文件(最好是swf) 到数据和价值来源:

<object type="application/x-shockwave-flash" data=""  
 style="width:640px;height:480px;margin:1px 350px;">
<param name="movie" value="" />
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="wmode" value="opaque" />
<param name="quality" value="high" />
<param name="menu" value="false" />
</object>

Link 到完整的当前项目:

Codepen

我建议使用 <embed> 标签而不是 <object> 来进行基本的 Flash 嵌入(更少的设置代码)。

为了实现您的目标,您必须...

  • 检查选择的文件类型(参见下面代码中的: var type = file.type;)。

  • 为此类文件创建适当的元素(标签)(参见: document.createElement("video"); 代码)。

  • 删除容器中任何已经存在的元素....removeChild(container.childNodes[0].

  • 使用.appendChild(someNewElement);

    [=将新元素放入同一容器(例如: a <div>) 60=]

您可以尝试如下操作:
这里的 <div> 包含在 <a> 标签中,它本身是您新创建的(或 dynamic)元素的容器。请注意它的 id 是 aTag,因此通过 var container = document.getElementById("aTag"); 获取引用意味着稍后我们可以使用 container.appendChild(tmpElement);

更新 aTag 内容
<!DOCTYPE html>
<html>
<body>

<p> Choose a media file...</p>
<input type="file" id="fileChooser" accept="*/*"/>

<div>
<a id="aTag"> </a>
</div>

<script>

document.getElementById('fileChooser').addEventListener('change', onFileSelected, false);

function onFileSelected(evt) 
{
    var file = evt.target.files[0]; // FileList object
    var type = file.type;
    //alert("file TYPE is : " + type);

    var fileURL = URL.createObjectURL(file);

    var reader = new FileReader();
    reader.readAsDataURL(file);

    var tmpElement; //will hold image, video, Flash content....
    var path; //will hold URL of file BLOB (not file path)....

    reader.onloadend = function(evt) 
    {

        if (evt.target.readyState == FileReader.DONE) 
        {
            //# update file path...
            path = (window.URL || window.webkitURL).createObjectURL(file);

            //# remove any other existing media element...
            var container = document.getElementById("aTag");
            container.removeChild(container.childNodes[0]); 


            //# create HTML5 media element...
            if ( type == "image/jpeg" || type == "image/png" || type == "image/gif")
            {
                tmpElement = document.createElement( "img");
                tmpElement.setAttribute("width", "650");
            }

            if ( type == "video/mp4" )
            {
                tmpElement = document.createElement( "video");
                tmpElement.setAttribute("controls", "true" );
                tmpElement.setAttribute("width", "800");
            }

            //# create Flash plugin <embed> tag...
            if ( type == "application/x-shockwave-flash" )
            {
                path = (window.URL || window.webkitURL).createObjectURL(file);

                aTag.innerHTML = "<embed id='aFlash' src='" + path + "' width='800' height='600' type='application/x-shockwave-flash'>"

                //# stop code here since we don't need these "appendChild" commands below
                return 0; //exit the function
            }


            //# add newly created HTML5 element with file path
            tmpElement.setAttribute("src", path);
            container.appendChild(tmpElement);
        }
    };


}

</script>

</body>
</html>

PS:
Chrome 浏览器不允许从文件选择中动态加载 SWF。在页面加载时,<embed> 标记必须存在,并在 "src" 参数中具有基于 url 的 http://file://。这是一个安全问题。

在 Firefox 上测试了 SWF 加载,它工作正常。
更新后的代码仅在 Chrome 上进行了测试,可以正常加载 Flash 内容。