필자가 작성한 크롬 확장에서 캐스팅 API를 시작하려고합니다. 웹 서버의 일반 HTML 파일에서이 동일한 코드를 실행하면 완벽하게 작동합니다. 이 코드를 내 확장 프로그램의 팝업에서 사용할 때 작동하지 않습니다. 이 경우 requestSession 호출이 전혀 작동하지 않으며 호출 된 후에 아무 것도 발생하지 않습니다.사용자 지정 크롬 확장 장치가 시작되지 않음
예상되는 동작은 Google Cast 확장 프로그램이 기기 목록 팝업을 표시한다는 것입니다. 여기 내 자바 스크립트와 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>
자바 스크립트 :
//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 호출을 실행하기 전에 팝업을 닫으려고했지만 여전히 작동하지 않습니다. 누구든지 아이디어가 있습니까?
오류가 있습니까? 팝업없이이 작업을 해본 적이 있습니까? – Charlie
아무런 오류가 없습니다. html 파일을 열고 시도해도 문제가 없습니다. 분명히 문제의 원인이되는 팝업이지만 해결 방법을 모르겠습니다. – kilakev
이전에는 크롬 확장 프로그램을 다루지 않았지만 어떻게 팝업 창을 부르니? Chrome 확장 API 또는 'alert()'와 같은 일반적인 자바 스크립트에만 해당됩니까? – Charlie