2013-01-24 11 views
8

私のアプリケーションには、ユーザーのカメラからのビデオを表示するためにgetUserMediaを使用するモーダルダイアログボックスがあります。これにより、「拒否/許可」バーが表示されます。ユーザーが「拒否」または「許可」をクリックする前にダイアログを閉じるとします。それを使用していた要素が消えても、バーは残っています。getUserMediaリクエストのキャンセル

ユーザーがアクセスしたことがないにもかかわらず許可要求を非表示にできることをブラウザに通知する方法はありますか?あなたは上の停止()を呼び出します、

$("body").on('click', "#stop_button", function(e) { 
     e.preventDefault(); 
     mediaStream.stop(); 
    }); 

MediaStreamのは、私はあなたの例ではそう

 navigator.getUserMedia(
      { 
       video: true, 
       audio: false 
      }, 
      function(stream) { 
       if (navigator.mozGetUserMedia) { 
       video.mozSrcObject = stream; 
       } else { 
       var url = window.URL || window.webkitURL; 
       video.src = url ? url.createObjectURL(stream) : stream; 
       } 
       mediaStream = stream; 
       video.play(); 
      }, 
      function(error) { 
       console.log("ERROR: " + error); 
      } 
     ); 

getUserMedia

呼び出されたときに定義されていた私のグローバル変数です:

+0

いいえ、セキュリティ上の理由があります。ブラウザは、ドメインが許可/拒否リストにまだない場合、ドメインがそのメディアにアクセスしようとするたびに尋ねます。 –

+0

私の質問は気まずいと感じました。私が本当に求めていたもの以外のものを求めていたように聞こえました。うまくいけば私の編集は十分に質問を明確にしている。 –

+0

私はあなたが気にしないことを願っていますが、誰かが答える可能性が高いという希望で、質問をより単純な形に縮小しました。複数の要求を持つという副次的な問題は、グローバルスコープオブジェクトや、アクセスが許可されたときに呼び出されるグローバル関数など、スコープの広い変数を使用することで解決できます。どちらのコールバックも同じ効果があるので、どちらのコールバックが発生するかは関係ありません。 – Dave

答えて

-4

は、私はあなたがこのような何かをしたいと思いますダイアログが閉じられたときのメディアストリーム - イベントハンドラを作成する必要があります。

このTutorial on getUserMediaを見てみると、完全な実例とライブデモがあります。私は、FirefoxとChrome 41(カナリア)でこれをテストしてみたし、それが動作します

location.reload(); 

+3

私はテストするためのコンピュータを手元に持っていませんが、ユーザがまだ許可/拒否していない場合、これによって権限バナーが消えないとは思います。少なくとも、これは私が数ヶ月前にこれを試していたときのケースでした。 – Dave

2

ユーザーがダイアログボックスを閉じ、と許可要求をクリアするためにページをリロードしてください。

警告:Chrome 39(本書の現在のバージョン)には、これがうまくいかないバグがあるようです。私は動作しないページに移動するのは初めてですが、手動でページを一度リフレッシュしてから作業を開始します。

私はこの答えがすぐには役に立たないかもしれないが、一度Chrome 41が出荷されるとうまくいくはずです。

現在のところ、ページを再読み込みせずにアクセス許可のプロンプトを消去する方法はありません。

関連する問題