7

Merhaba!
Arka planda bir SWF Nesnesi yerleştirmem gereken bir Chrome uzantısı yapıyorum.
Her şey, SWFobject ve eventListeners için JavaScript denetimleri dışında çalışır.
Tahminimce, etki alanları arası politikalarla ilgili bir şey vardır, çünkü bir web sunucusunda sayfayı test ederken her şey iyi çalıştı.Bir Chrome Uzantısında SWF Nesnesi - API Kullanılamıyor

ana sayfasında: Arka planda

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

Ve Olay Dinleyicilerine:

Neyse

, burada parçacık İşte Youtube hem Soundcloud birini gömmek için konsolunda

soundcloud.addEventListener('onMediaEnd', playerNext); 

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

o

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

atar.

Ayrıca swfobject böyle gömülü (ve çalışır) olduğu: Uzun yazı için

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

Üzgünüm, mümkün olduğu kadar çok bilgi sağlamak istedik. yardımcı olabilecek herkese şimdiden bir çok
Giacomo

+0

Sizin için bir yanıt yok, ancak bir öneri: YouTube SWFObject kodunuz FlashVars'ı iki farklı yerde ilan ediyor; Tek bir yöntemle basitleştirmenizi öneririm. ? enablejsapi = 1 & playerapiid = player, FlashVars nesnesine {autoplay: 1, enablejsapi: 1, playerapiid: "player"} olarak eklenebilir. Alternatif olarak, 'autoplay'i querystring'e taşıyabilirsiniz: • enablejsapi = 1 & playerapiid = player & autoplay = 1 – pipwerks

+0

@pipwerks Öneri için teşekkürler, bunu nasıl unuttum bilmiyorum! – Giakki

+0

"Oynatıcı" nın nasıl tanımlandığı hakkında kafam karıştı. Bazen onun bir global ("playerPause" içinde) ve bazen bir yerel ("onYouTubePlayerReady" içinde) belki orada bir ipucu var. – mjhm

cevap

0

Sen this extension bir göz olabilir)

Teşekkür; Ayrıca
, bu sadece benim ikinci uygulama oldu, kod hoş değil biliyorum , chrome uzantısında yerel bağlantıya erişemezsiniz, ancak bunun yerine bir proxy betiği olarak bir içerik betiği çalıştırabilirsiniz. (gae veya başka herhangi bir ücretsiz sunucuda bir proxy sayfası sunabilirsiniz)

0

Burada sorun şu ki Bildiri, v2'ye dönüştüğü için, satır içi komut dosyalarını veya satır içi olay işleyicilerini krom uzantılarında kullanmayın. Neler olup bittiğini anlamak için bana dosya eklemiş olmalısın. Ama kısaca Hiç yapaBİLİRSİNİZ tüm

ana sayfasında

,

  • tüm satır içi komut dosyalarını kaldırın ve harici bir JS dosyasına taşımaktır.
  • swf yakalayan bir kamerası görüntü durumunu ele alalım, satır içi olay dinleyicileri kaldır aynı veya başka harici JS taşıyın ve

    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.

kullanın kamerası sayfasına akış, ancak edilecektir işlev çağrısı için Asla yapılmayabilir ve dolayısıyla görüntü hiçbir zaman yakalanmayacaktır. Addons pop-up'ından QR kodlarını taramak için yaptığım projem, bunun sonucunda oluşan harabeleri karşıladı.