JavaScript:更改embed-tag的src属性

时间:2010-03-22 15:58:39

标签: jquery html5 embedded-resource

我有以下情况。

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

HTML

<embed src="/resources/audio/_webbook_0001/embed_test.mp3" type="audio/mpeg" id="audio_file">

的JavaScript

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

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

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

为什么Safari会阻止我更改<embed>来源,我该如何规避?

7 个答案:

答案 0 :(得分:21)

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

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

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

答案 1 :(得分:4)

当我想要更改“embed”元素的“src” - 属性时,我也面临同样的问题,所以我所做的,如下所示:

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

$('embed#audio_file').remove();
parent.append(newElement);

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

结论: - 你需要首先删除embed元素,然后你必须在src中更改它重新插入。

答案 2 :(得分:3)

这是 Chrome 中的一个错误。替代解决方案不是更改嵌入元素的 src,而是尝试用新的 src 替换克隆的嵌入

$('embed').replaceWith($('embed').clone().attr('src','anotherfile.swf'));

答案 3 :(得分:2)

Chrome中存在一个错误,请尽快修复它:http://code.google.com/p/chromium/issues/detail?id=69648

答案 4 :(得分:1)

JQuery遵循CSS-esque声明:

而不是做

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

宁可做

function onFileSelected(file, directory) {
   jQuery('#audio_file').attr('src', '/resources/audio/'+directory+'/'+file);
};

这样,jQuery只检索id =“audio_file”的对象。

答案 5 :(得分:0)

将div添加到嵌入代码中,

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['dog', 'cat', 'mouse', 'spider', 'fish', 'dog'],
                   'B': ['New York', 'London', np.nan, 'Berlin', np.nan,
                         'Paris']})

df.loc[(~df["A"].str.contains("dog"))&(df["B"].notnull()),"A"] = df["B"]

print (df)
#
        A         B
0     dog  New York
1  London    London
2   mouse       NaN
3  Berlin    Berlin
4    fish       NaN
5     dog     Paris

在脚本中:

 <div id="pdfId">
    <embed src="/resources/audio/_webbook_0001/embed_test.mp3" type="audio/mpeg" id="audio_"/>
</div>

答案 6 :(得分:-1)

var element = document.getElementById('element-embed');
changeSrcEmbed(element,'https://coccoc.com');
function changeSrcEmbed(element, src) {
    var id = element.id;
    element.src = src;
    var embedOld = document.getElementById(id);
    var parent = embedOld.parentElement;
    var newElement = element;
    document.getElementById(id).remove();
    parent.append(newElement);
}
<embed id="element-embed" style="width:1100px; height: 700px;">