2

JavaScript と jQuery を使用して Chrome 拡張機能を作成しています。とりわけ、ユーザーがアクセスしたページで scmplayer が自動再生されないようにしたいと考えています。以下は、自動再生設定を有効にして、ページに scmplayer を追加する典型的な例です。

<script type="text/javascript" src="http://scmplayer.net/script.js"
    data-config="{
        'skin':'skins/cyber/skin.css',
        'volume':50,
        'autoplay':true, <!-- The autoplay setting -->
        'shuffle':true,
        'repeat':1,
        'placement':'top',
        'showplaylist':false,
        'playlist':[{'title':'Bauhaus, %22Antonin Artaud%22','url':'http://www.youtube.com/watch?v=VJS9SKz7yog'},
        ...
        ">
</script>

スクリプトを実行する前にスクリプトの data-config 属性を編集して、'autoplay':trueautoplay':false.

jQuery または Javascript を使用してそのビットを実行するにはどうすればよいですか?

次に、このスクリプトの data-config 属性を Chrome 拡張機能内から変更する特に良い方法はありますか? または、scmplayer の自動再生を防ぐためのより良い方法がある場合、どうすればよいですか?

4

1 に答える 1

2

このように開始する前に、 SCM APIを使用して一時停止/停止することができます。

SCM.pause();

SCMここではグローバルスコープ変数です。

ただし、chrome 拡張機能のコンテンツ スクリプトは隔離された環境で実行されるため、拡張機能の content.js からこの変数に直接アクセスすることはできません。

ページに JavaScript コードを挿入する必要があります。

これが私の拡張ファイルです。

content.js

var actualCode = '(' + function() {
    function stopScm() {
        try {
            SCM.pause();
            alert("scm player was stopped");
        } catch(e) { 
            setTimeout(stopScm, 1000);
        }
    }
    stopScm();
} + ')();';
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

マニフェスト.json

{
  "name": "Stops SCM player",
  "version": "0.2",
  "manifest_version": 2,
  "description": "Example",
  "permissions": [
    "http://dl.dropboxusercontent.com/u/39457223/bountify/16/"
  ],
  "content_scripts": [ {
       "matches": ["http://dl.dropboxusercontent.com/u/39457223/bountify/16/*"],
       "js": ["content.js"],
       "run_at": "document_end"
    }
  ] 
}

編集:

あなたがその URL を共有した後、その拡張機能を試してみました。はい、うまくいきませんでした。

scmframe問題は、ロードされる前に拡張コードが実行されることです。

scmframe<iframe>SCM スクリプトによって追加される静的 ID です。

したがって、iframe が読み込まれるのを待った方がよいでしょう。このコンテンツ スクリプトを試してみてください。URL にも作用しています。

content.js

$("#scmframe").load(function() {
    var actualCode = '(' + function() {
        function stopScm() {
            try {
                SCM.pause();
            } catch(e) {
                setTimeout(stopScm(), 1000);
            }
        }
        stopScm();
    } + ')();';
    var script = document.createElement('script');
    script.textContent = actualCode;
    (document.head||document.documentElement).appendChild(script);
    script.parentNode.removeChild(script);
});
于 2013-07-08T02:10:05.357 に答える