JavaScript:更改embed-tag的src属性

Mik*_*ike 10 jquery html5 embedded-resource

我有以下场景.

我向用户显示服务器的一些音频文件.用户单击一个,然后最终使用所选文件夹和文件执行onFileSelected.该函数的作用是更改嵌入对象的源.所以在某种程度上,它是在接受它之前预览所选文件并保存用户的选择.视觉辅助.

HTML

<embed src="/resources/audio/_webbook_0001/embed_test.mp3" type="audio/mpeg" id="audio_file">
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function onFileSelected(file, directory) {
   jQuery('embed#audio_file').attr('src', '/resources/audio/'+directory+'/'+file);
};
Run Code Online (Sandbox Code Playgroud)

现在,这在Firefox中运行良好,但Safari和Chrome只是拒绝更改源,无论操作系统如何.

jQuery找到对象(jQuery.size()返回1),它执行代码,但HTML代码没有变化.

为什么Safari阻止我更改<embed>源代码,我该如何规避这个?

jit*_*ter 21

您应该删除embed元素并使用新src参数集重新注入它.

embed喜欢object和相似的是两个元素,由于它们的特殊用途(视频,音频,flash,activex,...),在某些浏览器中的处理方式与普通的DOM元素不同.因此,更改src属性可能不会触发您期望的操作.

最好的方法是删除现有embed对象并重新插入它.如果你用src属性作为参数编写某种包装函数,这应该很容易


小智 6

当我想更改“嵌入”元素的“src”属性时,我也遇到了同样的问题,所以我所做的如下所示:

var parent = $('embed#audio_file').parent();
var newElement = "<embed src='new src' id='audio_file'>";

$('embed#audio_file').remove();
parent.append(newElement);
Run Code Online (Sandbox Code Playgroud)

这将在我的应用程序中正常工作。

结论: - 您需要首先删除嵌入元素,然后您必须通过更改 src 重新插入它。