7

嗨!
我正在構建一個Chrome擴展,我需要在後臺頁面中嵌入一個SWF對象。
一切正常,除了SWFobject和eventListeners的JavaScript控件。
我的猜測是它與跨域策略有關,因爲在web服務器上測試頁面時一切正常。Chrome擴展中的SWF對象 - API Unavaiable

總之,這裏的一個片段:

在主要頁面:

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

而且事件監聽器

soundcloud.addEventListener('onMediaEnd', playerNext); 

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

在控制檯它拋出

"Uncaught TypeError: Object # has no method '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' 
      } 
     ); 
    } 
} 

對不起,冗長的帖子,我想提供儘可能多的信息成爲可能。
另外,我知道的代碼是不漂亮,這只是我的第二個應用程序;)

非常感謝事先向任何人誰可以幫助,
賈科莫

+0

沒有答案給你,但建議:你的YouTube SWFObject代碼在兩個不同的地方聲明FlashVars;我建議你簡化爲單一的方法。 ?enablejsapi = 1&playerapiid = player可以作爲{autoplay:1,enablejsapi:1,playerapiid:「player」}插入到FlashVars對象中。或者,您可以將'autoplay'移動到查詢字符串中:?enablejsapi = 1&playerapiid = player&autoplay = 1 – pipwerks

+0

@pipwerks感謝您的建議,我不知道我是如何將它忘記的! – Giakki

+0

我對如何定義「玩家」感到困惑。有時它是一個全球性的(在「playerPause」中),有時它是一個本地的(在「onYouTubePlayerReady」中)也許有一個提示。 – mjhm

回答

0

你可以看看this extension ,你不能訪問Chrome擴展本地連接,但你可以運行一個內容腳本作爲代理腳本來代替。(你可以在GAE上或任何其他免費服務器服務代理頁)

0

這裏的問題是,你可以自從清單發展爲v2以來,不會在chrome擴展中使用內聯腳本或內聯事件處理程序。

你應該已經添加了清單文件,以幫助我更好地理解發生了什麼。但是,簡單地所有你所能做的是

在主頁中,

  • 刪除所有內嵌腳本,並將其移動到外部JS文件。
  • 刪除內嵌事件偵聽器,將它們移動到相同或其他外部JS和使用

    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.

以一個網絡攝像頭圖像捕捉SWF的情況下,攝像頭將被傳輸到頁面,但功能調用它永遠不會被製作,因此圖像永遠不會被捕獲。 我的項目從附加彈出窗口中掃描QR代碼,因此遇到了遺蹟。