使用以下javascript / jquery代码:
$embedDiv.oembed(url,{ //url is the actual url of the embedded media
allowedProviders: ["flickr", "youtube", "vimeo"],
embedMethod: "fill",
maxWidth: frmWidth,
maxHeight: frmHeight,
afterEmbed: function(oembedData) {
$flagText.val("1");
$url.removeData('thumbnail_url');
},
onProviderNotFound: function(oembedData){
$embedDiv.html("");
}
});
我的页面上有以下输出:
<div class="embed">
<iframe src="(some url)" width="425" height="349" allowfullscreen="true" allowscriptaccess="always" scrolling="no" frameborder="0" style="max-height: 125px; max-width: 222px;"></iframe>
</div>
至少,如果有问题的媒体网址是好的。如果它使用了一个坏网址,但它解决了某些问题(比如某个认证方案保护的媒体链接),那么我会得到类似的信息:
<div class="embed">
<a href="(some url)">undefined</a>
</div>
现在,我不介意锚标签在那里,但undefined
是非常不受欢迎的,因为它显示而不是媒体。通过在div上放置一个监视表达式,我可以清楚地看到oembed的回调正在执行此操作。我正在寻找一种方法来防止oembed将此文本放在锚标记中,或者将锚标记放在首位。
请注意,稍后返回并删除它无法正常工作:因为它是一个异步回调,我无法知道何时会调用它。我只能避免或隐藏它。
答案 0 :(得分:1)
TLDR:不能信任提供商提供良好的oembedData
。
似乎这是oembed代码中的一个错误,它不检查提供程序返回的数据中的空值:
$.fn.oembed.getGenericCode = function(url, oembedData) {
var title = (oembedData.title !== null) ? oembedData.title : url,
code = '<a href="' + url + '">' + title + '</a>';
if (oembedData.html) code += "<div>" + oembedData.html + "</div>";
return code;
}
我已提交修复:
var title = ((oembedData.title) && (oembedData.title !== null)) ? oembedData.title : url,