13

popup.html と注入されたコンテンツ スクリプトを含む chrome 拡張機能があります。挿入されたコンテンツ スクリプトを使用して、YouTube の JavaScript API 関数にアクセスしようとしていますが、1 つを除いてすべて正常に動作します: addEventListener.

Youtube の JavaScript API のイベント リスナーは、動画の状態の変化をリッスンします。したがって、ビデオの最後に到達すると、状態は 0 に変わります。

var currentVideo = document.getElementById('movie_player');
currentVideo.addEventListener("onStateChange", "onytplayerStateChange");

function onytplayerStateChange() {
   console.log("The state of the player has changed");
}

このコードは、通常の環境では正常に機能しますが、コンテンツ スクリプトでは機能しません。コンテンツ スクリプトで変更イベントをキャッチできないのはなぜですか? 何か案は?

4

1 に答える 1

13

コンテンツ スクリプトは、現在のページのスコープでは実行されません。<script>この回答で説明されているように、イベントハンドラーは別のタグを介して挿入する必要があります: Building a Chrome Extension with Youtube Events :

var actualCode = 'function onytplayerStateChange() {'
               + '    console.log("The state of the player has changed");'
               + '}';

var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

PS。DOM はコンテンツ スクリプトで使用できるため、イベント ハンドラーのバインドは機能します。

于 2012-03-19T20:35:26.823 に答える