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 が再生されません。

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

Safari に認証 Cookie を強制的に送信させる方法はありますか? このアクションで承認を無効にすることはオプションではないことを指摘しておく必要があります。

それ以来、最新のSafari 5.1.5でこれを試しましたが、うまくいきませんでした。

4

1 に答える 1

1

私は自分でこの問題に遭遇し、この問題に対する次の回避策を考え出しました。これは、ファイルのBase64エンコードバージョンを取得するためにCookieを利用する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>
于 2012-09-11T14:59:17.243 に答える