1

使用以下 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>

至少,如果有问题的媒体网址是好的。如果它使用了错误的 url,但它仍然解析为某些东西(例如受某种身份验证方案保护的媒体链接),那么我会得到类似的东西:

<div class="embed">
  <a href="(some url)">undefined</a>
</div>

现在,我不介意锚标签在那里,但这undefined是非常不可取的,因为它显示而不是媒体。通过在 div 上放置一个 watch 表达式,我可以清楚地看到 oembed 的回调正在执行此操作。我正在寻找一种方法来防止 oembed 将此文本放置在锚标记中,或者首先将锚标记放置在首位。

请注意,稍后简单地返回并删除它是行不通的:因为它是一个异步回调,我无法知道何时调用它。我只能避免它或以某种方式隐藏它。

4

1 回答 1

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,
于 2013-06-07T00:39:33.890 回答