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':true为 ' autoplay':false

我如何用 jQuery 或 Javascript 来做这件事?

那么,是否有一种特别好的方法可以从 Chrome 扩展程序中修改此脚本的 data-config 属性?或者,如果有更好的方法来防止 scmplayer 自动播放,我该怎么做?

4

1 回答 1

2

您可以在开始之前使用SCM API暂停/停止,

SCM.pause();

SCM这里是一个全局范围变量。

但是 chrome 扩展的内容脚本是在一个隔离的环境中执行的,所以你不能直接从你的扩展 content.js 访问这个变量。

您必须将 javascript 代码注入页面。

这是我的扩展文件,

内容.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 上工作。

内容.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 回答