2012-10-25 19 views
12

webkitGetUserMediaを使用して正常なウェブページ上のウェブカメラからビデオをキャプチャできましたが、私のChrome拡張機能のpopup.htmlでこれを実行しようとすると何も起こりません。私は許可エラーを得ていない、それはちょうど質問するようなことではない(情報はポップアップウィンドウで決して滑り落ちることはない)。これを回避する方法はありますか?マニフェストjsonでパーミッションを与えることはできません。Chrome拡張機能のポップアップウィンドウでwebkitGetUserMedia権限を与えるにはどうすればよいですか?

+0

を書くことmanifest.jsonあなたがする必要がありますので、あなたが投稿することができ、エラーを取得しますあなたのmanifest.jsonファイルとあなたのpopup.htmlにあるコード。私はこれがうまくいくと信じていますが、私はあなたが手伝ってくれるものを見なければなりません。私は背景ページから同じことをしようとしていますが、私はポップアップからそれを行うことができます。 – jmort253

答えて

6

Chrome拡張機能とのWebRTC:

Chrome Extensions Manifest Permissions Documentationマニフェスト、「videoCapture」と「audioCapture」に必要な2つの権限を言及していないので、その機能がChromeに利用可能な場合、私はわからないんだけど拡張機能の有無にかかわらず、それ以上続ける前に何が起こるか試してみるべきです! ;)

クロームパッケージ化されたアプリとのWebRTC:

しかし、クロームパッケージ化アプリケーションでは、それは両方のサンドボックスと非サンドボックスページでは、可能です! Chromeパッケージアプリケーションは拡張機能と非常によく似ていますので、何をしているかによってアプリを構築することができます。

Packaged Apps Manifest Permissions Documentationでは、「videoCapture」および「audioCapture」のアクセス許可は明示的にリストされていませんが、例ではその例を示しています。

webkitGetUserMediaを実行するためにサンドボックス化されたHTMLページを使用するパッケージ化されたアプリケーションがあり、うまくいきます。ここでは、あなたのマニフェストに必要があると思いますものです:アプリとして// NEWTABページ:あなたはその後、Chromeからのポップアップを起動する必要があり

{ 
    "name": "app name", 
    "version": "0.2", 
    "manifest_version": 2, 
    "minimum_chrome_version": "21", 
    "app": { 
    "background": { 
     "scripts": ["main.js"] 
    } 
    }, 
    "icons": { 
    /* "128": "icon_128.png" */ 
    }, 
    "sandbox": { 
    "pages": ["call.htm" ] 
    }, 
    "permissions" : [ "videoCapture", "audioCapture" ] 
} 

// Chrome v24+ 
chrome.app.runtime.onLaunched.addListener(function() { 
    chrome.app.window.create('mainpage.html', 
     {width: 1190, height: 709}); 
}); 

そしてメインページあなたのポップアップウィンドウでなければなりません:main.jsはこのようなものが含まれている必要があります。私のセットアップでは、mainpage.html内にcall.htmというiframeがあり、iframeページはサンドボックス化されているので、通常のWebページとしてしか実行できない安全でない操作を行うことができます。しかし、私は非サンドボックス、ポップアップでgetUserMediaコマンドを実行した場合、私はwebkitGetUserMediaへの呼び出しからMediaStreamのオブジェクトを取得行います

navigator.webkitGetUserMedia({ audio: true, video: true }, 
       function (stream) { 
        mediaStream = stream; 
       }, 
       function (error) { 
        console.error("Error trying to get the stream:: " + error.message); 
       }); 

私はそれをテストし、私は、ポップアップで、私のビデオをキャプチャすることができました。

+0

詳細をありがとう!残念ながら、拡張機能では機能しません: "この拡張機能をインストールしようとすると警告が表示されました: 'videoCapture'はパッケージ化されたアプリケーションでのみ使用でき、これは拡張機能です。 私はクロムで追跡されている問題を持っているので、うまくいけば、後でなく早くソートされてしまうでしょう。 – anonymouse

+1

パッケージ化されたアプリと拡張機能の間に大きな違いはありません。ページアクションやブラウザアクションを作成しようとするかもしれませんが、パッケージ化されたアプリケーションとして考えてみてください。私は間違っているかもしれませんが、私はあなたが拡張機能でやりたがっていると思うことはすべて、パッケージ化されたアプリapiを介して利用できると思います。彼らは拡張機能と同じ方法でインストールします... – jmort253

+0

私はそれを見て、ありがとう。 – anonymouse

16

これは安いハックですが、拡張機能のオプションページを作成してwebkitGetUserMediaへの呼び出しをJSに含めると、その拡張機能のすべてのURIについて、ユーザーがオプションで許可した後で許可を要求しますページには、バックグラウンドページにもそれを使用する権限があります。

+1

これは、解決策を探して数日後に私のために働いた! tsbarnes rocks! – kirley

+0

これは素晴らしいトリックです! – gregoiregentil

+1

作品!ユーザーにオプションページにアクセスする必要があります –

1

@tsbarnesによって示唆されるようにハックがあるが、Chromeはハックが異なっているアプリのために、あなたの代わりにbackground.jsからnavigator.webkitGetUserMediaを呼び出し、のようなもの:

navigator.webkitGetUserMedia({audio: true, video: true}, function() { 
    console.log('ok'); 
}, function(e) { 
    console.log('webcam not ok'); 
}); 

そして、あなたはまだ、オーディオ/ビデオにアクセスすることができます窓から。HTMLやnavigator.webkitGetUserMediaoptions.jsで作品を尋ねる他のWebView

0

いますが、新しいタブでoption.htmlポップアップを開く必要がありますかねえ

"options_ui": { 
    "page": "options.html", 
    "chrome_style": true, 
    "open_in_tab": true 
    } 
関連する問題