自定义Chrome扩展程序无法启动设备列表

时间:2014-03-02 03:09:40

标签: google-cast chromecast

我正在尝试从我正在编写的chrome扩展中启动强制转换api。当我在我的网络服务器上的常规旧HTML文件中运行相同的代码时,它完美地运行。当我在扩展程序的弹出窗口中使用此代码时,它不起作用。在这种情况下,requestSession调用完全不起作用,并且在调用之后似乎没有任何事情发生。

我认为预期的行为是google强制转换扩展会显示设备列表弹出窗口。这是我的javascript和html。其中大部分都是从CastHelloVideo-chrome中复制出来的。

HTML:

<html>
<head>
    <title>Popup</title>
    <style>
        body {
            min-width:5px;
            overflow-x:hidden;
        }
    </style>
    <script type="text/javascript" src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
</head>
<body>
    <button type="button" id="castButton">Cast!</button>
</body>
<script type="text/javascript" src="popup.js"></script>
</html>

使用Javascript:

//Constants
var applicationID = "<App ID>";
var session;
var currentMediaSession;

///////////////////////////////////////////////////////////////////
//Chromecast API
///////////////////////////////////////////////////////////////////

if (!chrome.cast || !chrome.cast.isAvailable) {
  setTimeout(initializeCastApi, 1000);
}

function loadMedia() {
  if (!session) {
    console.log("no session");
    return;
  }
  var mediaInfo = new chrome.cast.media.MediaInfo('http://commondatastorage.googleapis.com/gtv-videos-bucket/big_buck_bunny_1080p.mp4');
  mediaInfo.contentType = 'video/mp4';
  var request = new chrome.cast.media.LoadRequest(mediaInfo);
  request.autoplay = false;
  request.currentTime = 0;

  session.loadMedia(request,
    onMediaDiscovered.bind(this, 'loadMedia'),
    onMediaError);

}

/**
 * callback on success for loading media
 * @param {Object} e A non-null media object
 */
function onMediaDiscovered(how, mediaSession) {
  console.log("new media session ID:" + mediaSession.mediaSessionId);
  currentMediaSession = mediaSession;
}

/**
 * callback on media loading error
 * @param {Object} e A non-null media object
 */
function onMediaError(e) {
  console.log("media error");
}



//////////////////////////////////////////////////////////////////
//UI
//////////////////////////////////////////////////////////////////
var castbutton = document.getElementById("castButton");
castButton.onclick=function(){
    window.close();
    chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError);
//  loadMedia();
};


//////////////////////////////////////////////////////////////////
//Helper Functions
//////////////////////////////////////////////////////////////////
function initializeCastApi() {
  var sessionRequest = new chrome.cast.SessionRequest(applicationID);
  var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
    sessionListener,
    receiverListener);
  chrome.cast.initialize(apiConfig, onInitSuccess, onError);
}

function sessionListener(e) {
     console.log('New session ID: ' + e.sessionId);
     session = e;
}

function receiverListener(e) {
    console.log(e);
}

function onInitSuccess() {
  console.log("init success");
}

function onError() {
  console.log("error");
}

function onSuccess(message) {
  console.log(message);
}

function onRequestSessionSuccess(e) {
    session = e;
    console.log("session created");
}

 function onLaunchError(e) {
    console.log(e.description);
 }

我认为这可能是因为我试图在扩展程序的弹出窗口中运行它。也许chrome不允许多个插件同时显示他们(设备列表是google cast的弹出窗口)弹出窗口?我在尝试执行requestSession调用之前尝试关闭弹出窗口,但它仍然无效。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不支持在Chrome扩展程序中调用requestionSession API调用。这就是为什么你无法获得设备列表的原因。

在任何情况下,此方法调用仅适用于常规网页,并触发扩展程序以显示Cast设备的弹出窗口。这是它应该工作的唯一当前方式。