2011-05-24 86 views
1

我有一個內容腳本讀取數據,並使用谷歌tts服務獲取輸出音頻。 該問題涉及通過擴展注入腳本使用內容腳本注入音頻

當我通過JavaScript注入音頻元素時,我看到正確的url被調用並且音頻元素被添加。但它不起作用。我設置了自動播放屬性。

片段我使用

var url = 'http://translate.google.com/translate_tts?tl=en&q=' + encoded; 
console.log(url); 
var audio = new Audio(); 
audio.setAttribute('src',url); 
audio.setAttribute('autoplay'); 
var t = document.getElementById('doc'); 
if(t.appendChild(audio)){ 
    console.log('appended'); 
} 

https://chrome.google.com/webstore/developer/detail/dhfpnmpbgjadmhggjeajdfmkcclckeim

回答

0

問題是您無法通過內容腳本加載音頻。這可以通過使用後臺頁面來實現。

0

好了,你不需要追加的孩子,從背景頁面做:

var audio = new Audio(url); 
audio.load(); 
audio.play(); 

這應該工作,加載它在JavaScript中,它會播放。

+0

嗯任何一種方式都是一樣的。我試過你的方式,但仍然沒有工作。 – 2011-05-25 08:28:45

+0

它記錄它的正確含義,如果我打開它在播放聲音的新標籤中的網址。 – 2011-05-25 08:29:40

+0

你是從背景頁面做的嗎?我在本地做到了,它工作。也許你需要在清單中添加適當的權限,因爲它是一個外部資源。 – 2011-05-25 17:24:11

1

我也沒有與曼蘇爾先生的loadplay建議運氣。我認爲這裏的問題是,你們都有一半是正確的:a)將autoplay設置爲true,以及b)在背景頁面中進行。

例如,我有這樣的背景下頁面就好運行:

<!doctype html> 
<html> 
    <body> 
    <script type="text/javascript"> 
     var url = "http://translate.google.com/translate_tts?tl=en&q=Background"; 
     var audio = new Audio(url); 
     audio.autoplay = true; 
    </script> 
    </body> 
</html> 

還請注意,我從來沒有附加的元素添加到文檔;如果你沒有運氣,那麼你總是可以在appendChild上看看是否有所作爲。

此外,我認爲你的原始代碼應該工作得很好 - 即使ID爲doc的元素不存在 - 如果你把它扔到後臺頁面。

一些更筆記

出於某種奇怪的原因,「糾正」的符號來的&amp;而不是&休息對我來說。尷尬,但只是對其他人的謹慎。另外,如果你只是打開控制檯並從上面粘貼三行JavaScript,它可能無法工作 - 除非你在一個特殊的頁面,如新標籤頁面,擴展選項頁面,或者,你猜對了,是一個擴展背景頁面。我不確定爲什麼會出現這種情況,但Chrome可能會限制誰可以注入音頻內容並進行播放。我不知道爲什麼會這樣,或者是有意的還是無意的。我想,在使用HTML5時另一個警告。