我如何 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 到完整的当前项目:
我建议使用 <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 内容。
我如何 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 到完整的当前项目:
我建议使用 <embed>
标签而不是 <object>
来进行基本的 Flash 嵌入(更少的设置代码)。
为了实现您的目标,您必须...
检查选择的文件类型(参见下面代码中的:
var type = file.type;
)。为此类文件创建适当的元素(标签)(参见:
document.createElement("video");
代码)。删除容器中任何已经存在的元素...
.removeChild(container.childNodes[0]
.使用
[=将新元素放入同一容器(例如: a.appendChild(someNewElement);
<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 内容。