7

Ciao!
Sto costruendo un'estensione di Chrome, in cui ho bisogno di incorporare un SWFobject nella pagina di sfondo.
Tutto funziona, ad eccezione dei controlli JavaScript per SWFobject e EventListeners.
La mia ipotesi è che abbia qualcosa a che fare con i criteri interdominio, perché durante il test della pagina su un server web tutto ha funzionato bene.SWFobject in un Chrome Extension - API Unavaiable

In ogni caso, ecco un frammento:

Nella pagina principale:

var playerView = chrome.extension.getBackgroundPage(); 
$('#playerPause').click(function(){ 
    playerView.playerPause(); 
}); 

Sullo sfondo:

function playerPause() { 
    if (postData[nowPlaying].provider == 'youtube') { 
     player.pauseVideo(); 
    } 
    else if (postData[nowPlaying].provider == 'soundcloud') { 
     player.api_pause(); 
    }; 
} 

E i eventListeners:

soundcloud.addEventListener('onMediaEnd', playerNext); 

function onYouTubePlayerReady(player) { 
    player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }"); 
} 

Nella console getta

"Uncaught TypeError: Object # has no method 'pauseVideo'"

sia per il Youtube incorporare quello Soundcloud.

Inoltre, il SWFObject è incorporato in questo modo (e lavora):

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' 
      } 
     ); 
    } 
} 

Ci scusiamo per il lungo post, ho voluto fornire il maggior numero di informazioni possibile.
Inoltre, so che il codice non è abbastanza, questa è stata solo la mia seconda applicazione;)

Grazie mille in anticipo a tutti coloro che possono contribuire,
Giacomo

+0

Nessuna risposta per te, ma un suggerimento: il tuo codice YouTube SWFObject dichiara FlashVars in due luoghi diversi; Ti suggerisco di semplificare in un unico metodo. ? enablejsapi = 1 & playerapiid = il giocatore può essere inserito nell'oggetto FlashVars come {autoplay: 1, enablejsapi: 1, playerapiid: "player"}. In alternativa, puoi spostare "autoplay" nella querystring:? Enablejsapi = 1 & playerapiid = player & autoplay = 1 – pipwerks

+0

@pipwerks Grazie per il suggerimento, non so come l'ho dimenticato! – Giakki

+0

Sono confuso su come "giocatore" è definito. A volte è globale (in "playerPause") ea volte è locale (in "onYouTubePlayerReady") forse c'è un suggerimento lì. – mjhm

risposta

0

È possibile dare un'occhiata a this extension , non puoi accedere alla connessione locale nell'estensione chrome, ma puoi eseguire uno script di contenuto come script proxy (puoi servire una pagina proxy su gae o altri server gratuiti)

0

Il problema qui è che puoi utilizzare gli script inline o i gestori di eventi inline nelle estensioni chrome da quando il manifest si è evoluto in v2.

Dovresti aver aggiunto il file manifest per capire meglio cosa sta succedendo. Ma brevemente tutto si può mai fare è

Nella pagina principale,

  • Rimuovere tutti gli script in linea e spostarli in un file JS esterno.
  • Rimuovere listener di eventi in linea, spostarli lo stesso o un altro JS esterni e utilizzare

    addEventListener().

But the issue is, You can't execute calls to the swf in the background page or expect it to return anything. All these will continue to give you "Uncaught TypeError" Exception.

Prendiamo il caso di un'immagine della webcam cattura swf, la webcam sarà trasmesso in streaming alla pagina, ma la funzione di chiamata a non può mai essere realizzato e quindi l'immagine non verrà mai catturata. Il mio progetto per scansionare i codici QR dal popup dei componenti aggiuntivi ha incontrato le rovine a causa di questo.