2012-04-06 12 views
0

フォーム認証付きのASP.NET MVC3アプリがあり、しばらくの間うまく機能しています。私はオーディオファイルのsrc属性(mp3またはogg)が、一部のオーディオコンテンツのGUID IDを受け入れるMVC3 GETアクションを指し示すhtml5オーディオタグを試しています。アクションメソッドはFileStreamResultを返し、MSIE9(mp3)、FireFox 9+(oga)、Chrome 18(oga)でオーディオを再生することができます。 Safari 5.1.4では、サポートするはずのmp3は再生できません。SAFARIでフォーム認証でHTML5オーディオを使用する

さらに調査すると、サファリの場合のアクションメソッドへのリクエストは認証されていないため、リクエストヘッダーを確認すると、.aspxauth Cookieがリクエストに含まれていないことがわかります。オーディオタグの要求の前後に選択された他のアクションリンクはすべて、.aspxauthクッキーを送信します。

サファリに認証Cookieを強制的に送信する方法はありますか?私は、この行動の許可を無効にすることは選択肢ではないことを指摘しておきます。

私はこれまで、Safari 5.1.5でこれを試したことがありません。

答えて

1

私はこの問題に直面して、次の回避策を思いつきました。これは、ファイルのBase64でエンコードされたバージョンを取得するためにクッキーを利用するXMLHttpRequestを使用します。

var mediaElem = document.getElementById("media"); 

/* 
safari doesn't pass cookies with audio tag. User agent sniffing is not a good way 
to handle detection, but I am not sure what feature to sniff in this case, since 
currentSrc appears to be set as long as the response status is 200 OK 
*/ 
if(navigator.userAgent.toLowerCase().indexOf("chrome") < 0 && 
    navigator.userAgent.toLowerCase().indexOf("safari") >= 0) 
{ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET", "mediaFile.base64"); 
    xmlhttp.onreadystatechange = function() 
    { 
     //DONE readystate 
     if(xmlhttp.readystate = 4) 
     { 
      mediaElem.src = "data:audio/mpeg;base64," + xmlhttp.responseText; 
     } 
    } 
    xmlhttp.send(); 
} 

あなたの必要なのは、あなたのhtmlのどこかにあなたのオーディオタグです。

<audio id="media"> 
    <source src="mediaFile.mp3" /> 
    <source src="mediaFile.ogg" /> 
    Fallback statement... 
</audio> 
関連する問題