7

こんにちは!
バックグラウンドページにSWFオブジェクトを埋め込む必要があるChrome拡張機能を構築しています。
SWFobjectとeventListenersのJavaScriptコントロールを除き、すべて機能します。
ウェブサーバー上のページをテストしている間はすべて正常に機能していたので、クロスドメインポリシーとは関係があります。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(); } }"); 
} 

それはYouTubeの両方のための

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

をスローは、て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コードは2つの異なる場所でFlashVarsを宣言しています。私はあなたが単一の方法に単純化することをお勧めします。 ?enablejsapi = 1&playerapiid = playerは{autoplay:1、enablejsapi:1、playerapiid: "player"}のようにFlashVarsオブジェクトに挿入できます。 ?enablejsapi = 1&playerapiid = player&autoplay = 1 – pipwerks

+0

@pipwerks提案のおかげで、私はそれを忘れてしまったのか分かりません! – Giakki

+0

"player"の定義方法が混乱しています。場合によってはそのグローバル(「playerPause」内)と時にはローカル(「onYouTubePlayerReady」内)のヒントがあります。 – mjhm

答えて

0

あなたはthis extensionで見ることができクロム拡張でローカル接続にアクセスすることはできませんが、代わりにプロキシスクリプトとしてコンテンツスクリプトを実行できます(gaeやその他のフリーサーバにプロキシページを提供できます)

0

ここでの問題は、マニフェストがv2に進化して以来、クロム拡張でインラインスクリプトやインラインイベントハンドラを使用していません。

何が起こっているのかを理解するために、マニフェストファイルを追加しておく必要があります。しかし、簡単にあなたはを行うことができ、すべてのメインページで

で、

  • は、すべてのインラインスクリプトを削除し、外部JSファイルに移動します。
  • 、インラインイベントリスナーを削除し、同じまたは別の外部JSに移動し、swfファイルをキャプチャするウェブカメラの画像の場合を取り、ウェブカメラは、ページにストリーミングされます

    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.

を使用していますが、への関数呼び出し決して作れないので、イメージは決して捕らえられません。 アドオンポップアップからQRコードをスキャンする私のプロジェクトは、このために遺跡に会った。

関連する問題