SWFobject в Chrome Extension - API Unavaiable
Привет!
Я создаю расширение Chrome, в котором мне нужно встроить SWFобъект на страницу фона.
Все работает, кроме элементов управления JavaScript для SWFobject и eventListeners.
Я предполагаю, что он имеет какое-то отношение к междоменным политикам, потому что при проверке страницы на веб-сервере все работает нормально.
В любом случае, здесь фрагмент:
На главной странице:
var playerView = chrome.extension.getBackgroundPage();
$('#playerPause').click(function(){
playerView.playerPause();
});
В фоновом режиме:
function playerPause() {
if (postData[nowPlaying].provider == 'youtube' ) {
player.pauseVideo();
}
else if (postData[nowPlaying].provider == 'soundcloud' ) {
player.api_pause();
};
}
И eventListeners:
soundcloud.addEventListener('onMediaEnd', playerNext);
function onYouTubePlayerReady(player) {
player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }");
}
В консоли он бросает
"Uncaught TypeError: объект # не имеет метода 'PauseVideo'"
для Youtube встраивает Soundcloud один.
Кроме того, SWFobject встроен так (и работает):
function loadTrack (id) {
if(postData[id].provider == 'youtube') {
swfobject.embedSWF(
"http://www.youtube.com/e/" + postData[id].url + "?enablejsapi=1&playerapiid=player",
"player",
"1",
"1",
"8",
null,
{
autoplay: 1
},
{
allowScriptAccess: "always"
},
{
id: "player"
}
);
}
else if(postData[id].provider == 'soundcloud') {
swfobject.embedSWF(
'http://player.soundcloud.com/player.swf',
'player',
'1',
'1',
'9.0.0',
'expressInstall.swf',
{
enable_api: true,
object_id: 'player',
url: postData[id].url,
auto_play: true
},
{
allowscriptaccess: 'always'
},
{
id: 'player',
name: 'player'
}
);
}
}
Извините за длинный пост, я хотел предоставить как можно больше информации.
Кроме того, я знаю, что код не очень красивый, это было только мое второе приложение;)
Большое спасибо заранее всем, кто может помочь,
Джакомо
Ответы
Ответ 1
Вы можете посмотреть это расширение, вы не можете получить доступ к локальному соединению в chrome extension, но вы можете запустить контент script в качестве прокси-сервера script. (Вы можете обслуживать страницу прокси-сервера на gae или любых других бесплатных серверах)
Ответ 2
Проблема заключается в том, что вы не можете использовать встроенные скрипты или встроенные обработчики событий в хромовых расширениях с тех пор, как манифест эволюционировал до версии v2.
Вы должны добавить файл манифеста для меня, чтобы понять, что происходит лучше. Но кратко все, что вы МОЖЕТЕ когда-либо делать, это
На главной странице
- Удалите все встроенные скрипты и переместите их во внешний JS файл.
- Удалите встроенные прослушиватели событий, переместите их в ту же или другую внешнюю JS и используйте
addEventListener().
Но проблема в том, что вы не можете выполнять вызовы swf на исходной странице или ожидать, что она что-то вернет. Все это будет продолжать давать вам "Uncaught TypeError"
Исключение.
Возьмем случай захвата веб-камеры в swf, веб-камера будет передана на страницу, но вызов функции ей никогда не будет выполнен, и, следовательно, изображение никогда не будет захвачено.
Мой проект по сканированию QR-кодов из всплывающего окна аддонов встретил руины из-за этого.