2011-06-29 9 views
1

私は数日間この1つで私の頭を掻いてきました。埋め込みサウンドクリップの再生が要求される前に、埋め込みサウンドクリップがブラウザキャッシュにダウンロードされないようにするにはどうすればよいですか?

私はコールトラッキングに関連するクライアント用のWebアプリケーションを構築しています。このシステムの1つの態様は、短時間録音されたボイスメールメッセージを、メッセージの詳細の横にある「再生」ボタンから直接再生できるようにすることである。

私はそのようなサウンドファイルにアクセスしています。

サウンドクリップは、ディレクトリ内のWebルートの外部に保存されていますが、私たちは変更できないと言われています。ファイルをローカルに取得できないので、小さなPHPパススルースクリプトを使用してファイルをWebページに戻します。

サウンドクリップは、指定されたファイルのリンクIDを再生する前に、javascriptを使用してそのIDを取得しています。

function PlaySound(soundobj) { 
    var thissound=document.getElementById(soundobj); 
    thissound.Play(); 
} 

ファイルはWebルートの外部からアクセスされ、次のPHPコードでHTMLに渡されます。

$basedir = '/var/spool/asterisk/monitor'; 
$clip = $_GET['f']; 
$file = $basedir.'/'.$clip; 
$ext = array_pop(explode ('.', $file)); 
if(file_exists($file) && $ext != '' && isset($allowed[strToLower($ext)])) { 
    $type = $allowed[strToLower($ext)]; 
} 
header("Content-type: audio/x-wav"); 
header("Content-Disposition: filename='{$file}'"); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Length: ' . filesize($file)); 
readfile($file); 
exit(); 

すべてが正常に動作し、クリップが通過し、サウンドクリップがブラウザで再生されます。

問題は、ページが読み込まれたときにすべてのサウンドクリップがキャッシュに読み込まれることで、明らかに少し遅くなっています。私はその結果を一度に25ページしかダウンロードしないようにしましたが、私は実際に利用可能なサウンドクリップへのリンクを持っていて、再生するように選択されたときにダウンロードされるだけです。

すべてのアイデアをいただければ幸いです。

答えて

0

最も簡単な選択肢は、サウンドファイルをHTMLに埋め込むことではないと思います。私の知る限り、旧式のembed要素には、サウンドファイルのプリロードをオフにするオプションがありません。この機能では、HTML5のaudio(もちろん古いIEでは動作しません)を調べる必要があります。

基本的には、embed要素をHTMLコードに入れないでください。再生ボタンをクリックすると、JavaScriptコードのembed要素が挿入されます。 embed要素(URLなど)を作成するために必要なデータは、data-属性に格納することも、場合によってはインラインイベントハンドラのパラメータリストに書き込むこともできます。

JavaScriptをオフにしているユーザーを気にする必要がある場合は、タグにembed要素を含めることができます(うまくいけば、あらかじめ読み込みを開始しないでください)。

この方法では、document.createElement()insertBefore()のような基本的な機能が必要です。

+0

ええと、私はhtml5オーディオルートを最初に使いたいと思っていましたが、IE7とIE8を使って50%+ vistaがあるので、そのオプションはありません。埋め込み要素を挿入するためのDOMの使用についてのあなたの考えは実際にはうまくいくかもしれませんが、私はそれを試してみましょう。 – raynimmo

関連する問題