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 が適切であれば。それにもかかわらず何かに解決される悪い URL を使用している場合 (認証スキームによって保護されているメディアへのリンクなど)、次のような結果が得られます。

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

アンカー タグが存在してもかまいませんがundefined、メディアの代わりに表示されるため、非常に望ましくありません。div にウォッチ式を配置することで、oembed へのコールバックがこれを行っていることが明確にわかります。oembed がこのテキストをアンカー タグに配置したり、最初にアンカー タグを配置したりしないようにする方法を探しています。

後で戻って削除するだけでは機能しないことに注意してください。これは非同期コールバックであるため、いつ呼び出されるかわかりません。避けるか、何とか隠すしかありません。

4

1 に答える 1

1

TLDR: プロバイダーは信頼できるものを提供することはできませんoembedData

これは、プロバイダーによって返されたデータの null 値をチェックしない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 に答える