如何将文件输入链接到嵌入对象的源

时间:2019-03-14 15:35:55

标签: html object flash codepen

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

<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>

链接到当前的整个项目:

Codepen

我仍然是代码新手,如果人们没有因为不立即了解我而判断我,我将不胜感激

1 个答案:

答案 0 :(得分:1)

我建议在<embed>上使用<object>标签进行基本的Flash嵌入(较少的设置代码)。

要实现您的目标,您必须...

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

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

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

  • 使用<div>

  • 将新元素放入同一容器(例如: a .appendChild(someNewElement);)中

您可以尝试以下操作:
这里的<div>保存在<a>标记内,该标记本身就是您新创建的(或 dynamic )元素的容器。请注意,其ID为aTag,因此通过var container = document.getElementById("aTag");获取引用意味着以后我们可以使用aTag

更新container.appendChild(tmpElement);内容。
<!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>标签必须在页面加载时以http://参数中的基于file://"src"的url存在。这是一个安全问题。

在Firefox上测试了SWF加载,效果很好。
更新的代码仅在Chrome上经过测试,可以很好地加载Flash内容。