3

停止機能を提供するためにAudioオブジェクトを拡張する必要があります。通常、このコードは機能します。

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

ただし、これはChrome拡張機能のコンテンツスクリプト内から発生する必要があり、コンテキストが分離されているため、変更は他のコンテキストに伝播されません。

私はこのunsafeWindowハックを使用して、孤立した環境から抜け出そうとしましたが、成功しませんでした。また、Object.createを使用してconstructorプロパティを設定しようとしました。

4

1 に答える 1

0

コンテンツスクリプトには分離された実行環境がありますが、DOMをページと共有します。DOMにタグを追加することにより、ページの実際の実行環境でスクリプトを実行できます。<script>

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

このコードは両方の実行環境でスクリプトを実行すると思います(または、少なくともページの環境で実行する必要があります)。

このソリューションでは、ページに追加される新しいスクリプトリソースをブラウザが処理する必要があるため、DOMが完了するとすぐではなく、リソースの読み込み時間中または後にのみスクリプトを実行できることに注意してください。それはあなたの現在のニーズにとって問題ではないはずです。

于 2012-07-16T20:03:07.857 に答える