3

我需要扩展音频目的是提供一个停止功能。通常这个代码将工作:音频扩展/ HTMLMediaElement JavaScript对象

Audio.prototype.stop = function() { 
    this.pause(); 
    this.currentTime = 0; 
} 

不过,我需要这从一个Chrome扩展的内容脚本内发生,并且随着环境是分开的变化不会传播到其他方面。

我尝试过使用this unsafeWindow hack试图突破隔离环境,但没有成功,并尝试使用Object.create并设置constructor属性。

+1

页的全球'window'对象是从来没有的内容脚本访问。问题是重复[构建一个Chrome扩展 - 使用脚本内容在页面注入代码(http://stackoverflow.com/questions/9515704/building-a-chrome-extension-inject-code-in-a -page-使用-A-内容脚本)。注意,我会使用'if(!Audio.prototype.stop)...;',以避免执行'stop'时发生冲突。 – 2012-07-17 10:38:55

回答

0

内容脚本具有隔离执行环境,但这股与页面的DOM。

var s = document.createElement("script"); 
s.innerText = "Audio.prototype.stop = function() { this.pause(); this.currentTime = 0; }"; 
document.documentElement.appendChild(s); 

我相信这个代码将运行在这两种执行环境脚本(或者,至少是:你可以通过添加一个<script>标签到DOM运行在页面的实际执行环境的脚本它应该在页面的环境中运行)。

注意,期间或资源加载时间后,这种解决方案只能运行脚本,不尽快DOM是完整的,因为它需要浏览器过程中被添加到页面的新脚本资源。这对你当前的需求不应该是一个问题。